我有一个案例需要使用OpenPGP加密某些文件。我正在使用Bouncy Castle这样做。
据我了解,Bouncy Castle加密可以通过两种方式在java中使用:
我将Bouncy Castle添加为提供程序并继续使用标准Java库。
我直接使用Bouncy Castle库中指定的类。
我想知道这些方法的优缺点,推荐使用哪种方法。
此外,如果我使用第二种方法,那么为什么我仍然需要添加Bouncy Castle作为安全提供者。如果我不这样做,那么我会得到一个"没有这样的提供商"执行以下行时出现异常:
PGPEncryptedDataGenerator encGen =
new PGPEncryptedDataGenerator(
new JcePGPDataEncryptorBuilder(PGPEncryptedData.CAST5).setWithIntegrityPacket(withIntegrityCheck).setSecureRandom(
new SecureRandom())
.setProvider("BC"));
答案 0 :(得分:3)
据我了解,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作为安全提供者。如果我不这样做,那么我得到一个“没有这样的提供者”例外(...)?
Bouncy Castle PGP功能实际上建立在JCA之上;就这么简单。如果不是,您就无法使用Java密钥或其他(平台或硬件)加密功能。
许多其他软件组件也假设使用JCA。您不能简单地将轻量级API插入现有的协议实现中。