我有一种情况,我需要使用OpenPGP加密某些文件。我正在使用Bouncy Castle来这样做。
据我了解,Bouncy Castle加密可以在Java中以两种方式使用:
我将Bouncy Castle添加为提供程序,并继续使用标准Java库。
我直接使用Bouncy Castle库中指定的类。
我想知道两种方法的优缺点,以及推荐哪种方法。
另外,如果我使用的是第二种方法,那么为什么我仍然必须将Bouncy Castle添加为安全提供程序。如果我不这样做,那么执行以下行时会出现“ No Such Provider”异常:
PGPEncryptedDataGenerator encGen =
new PGPEncryptedDataGenerator(
new JcePGPDataEncryptorBuilder(PGPEncryptedData.CAST5).setWithIntegrityPacket(withIntegrityCheck).setSecureRandom(
new SecureRandom())
.setProvider("BC"));
最佳答案
据我了解,Bouncy Castle加密可以在Java中以两种方式使用:
我将Bouncy Castle添加为提供程序,并继续使用标准Java库。
我直接使用Bouncy Castle库中指定的类。
我想知道两种方法的优缺点,以及推荐哪种方法。
Java JCA是设计更好的文档,当然也是文档更好的API。它具有更好地定义的异常处理,以及最新的参数处理(ByteBuffer
)。
此外,通过使用提供程序抽象,不仅可以使用基于软件的提供程序(例如Bouncy Castle)来增强它,还可以使用平台功能和硬件提供程序来增强它。因此,如果您根据JCA进行编程,则会获得更加灵活的运行时奖励。
另一方面,轻量级加密API是一种相对较低级别的API,以相对良好的结构化方式提供了更多功能。如果使用它,则基本上是选择Bouncy Castle作为唯一的功能提供者。 Bouncy Castle仅包含Java代码中的特定实现,这意味着您将不会获得(很多)硬件支持。
Bouncy Castle的轻量级API没有管辖区限制(例如128位AES密钥)。因此,如果您想解决这些限制,可以将其用于您自己的协议(如果您可以下载一个等效的库而不会出现问题,那么请不要让我首先了解这些限制的原因)。
另外,如果我使用的是第二种方法,那么为什么我仍然必须将Bouncy Castle添加为安全提供程序。如果我不这样做,那么我会收到“没有这样的提供者”异常(...)?
充气城堡PGP功能实际上是建立在JCA之上的;就这么简单。如果不是,则无法使用Java密钥或其他(平台或硬件)加密功能。
许多其他软件组件也假定要使用JCA。您不能简单地将轻量级API插入现有协议实现中。