2016-05-16 64 views
2

我有一種情況,我需要使用OpenPGP加密一些文件。我正在使用Bouncy Castle來做這件事。Bouncy Castle作爲提供者v/s Bouncy Castle API

據我瞭解充氣城堡加密可以在Java中使用有兩種方式:

  1. 我加充氣城堡作爲一個供應商,並繼續使用標準的Java庫。

  2. 我直接使用Bouncy Castle庫中指定的類。

我想知道兩種方式的優點和缺點,並推薦使用哪種方法。

另外,如果我使用第二種方法,那麼爲什麼我仍然必須添加Bouncy Castle作爲安全提供程序。如果我不這樣做的話,我得到一個「沒有這樣的提供商」異常,當我執行以下行:

PGPEncryptedDataGenerator encGen = 
      new PGPEncryptedDataGenerator(
      new JcePGPDataEncryptorBuilder(PGPEncryptedData.CAST5).setWithIntegrityPacket(withIntegrityCheck).setSecureRandom(
      new SecureRandom()) 
      .setProvider("BC")); 

回答

3

據我瞭解充氣城堡加密可以在Java中使用有兩種方式:

  1. 我將Bouncy Castle作爲提供程序添加並繼續使用標準Java庫。

  2. 我直接使用Bouncy Castle庫中指定的類。

我想知道兩種方式的優點和缺點,並推薦使用哪種方法。

Java JCA是一個更好的設計和當然更好的記錄API。它有更好的定義異常處理,更多的最新參數處理(ByteBuffer)。此外,通過使用提供者抽象,不僅可以使用Bouncy Castle等基於軟件的提供者,還可以使用平臺功能和硬件提供者來增強其功能。因此,如果您針對JCA進行編程,您將獲得更靈活的運行時獎勵。

另一方面,輕量級加密API是一個相對較低級別的API,以相對良好的結構化方式提供更多功能。如果你使用它,你基本上選擇Bouncy Castle作爲你的唯一功能提供者。 Bouncy Castle僅包含Java代碼中的特定實現,這意味着您不會獲得(太多)硬件支持。

Bouncy Castle的輕量級API沒有管轄權限制(例如128位AES密鑰)。因此,如果您想要解決這些限制(如果您可以在沒有問題的情況下下載相同的庫,請首先了解爲什麼這些限制首先存在)的原因,那麼您可以將用於自己的協議

另外,如果我使用第二種方法,那麼爲什麼我仍然必須添加Bouncy Castle作爲安全提供程序。如果我不這樣做,那麼我會得到一個「No Such Provider」例外(...)?

Bouncy Castle PGP功能實際上建立在JCA上;這很簡單。如果不是,則不能使用Java密鑰或其他(平臺或硬件)加密功能。

許多其他軟件組件也假定要使用JCA。您不能簡單地將輕量級API插入現有的協議實現中。

相關問題