Bouncy Castle 作为提供商 v/s Bouncy Castle API
Bouncy Castle as provider v/s Bouncy Castle API
我有一个案例需要使用 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"));
As I understand it Bouncy Castle encryption can be used in java in two ways:
I add Bouncy Castle as a provider and continue to use the standard Java libraries.
I use the classes specified in the Bouncy Castle library directly.
I wanted to know the pros and cons of both the ways and which method is recommended.
Java JCA 的设计更好,当然也有更好的文档记录 API。它具有更好定义的异常处理,更新的参数处理 (ByteBuffer
)。
此外,通过使用提供者抽象,它不仅可以通过基于软件的提供者(例如 Bouncy Castle)得到增强,还可以通过平台功能和硬件提供者得到增强。因此,如果您针对 JCA 进行编程,您将获得更灵活的运行时。
另一方面,轻量级加密 API 是一个相对较低的级别 API,它以结构相对良好的方式提供了更多的功能。如果您使用它,您基本上是在选择 Bouncy Castle 作为您唯一的功能提供者。 Bouncy Castle 仅包含 Java 代码中的特定实现,这意味着您不会获得(很多)硬件支持。
Bouncy Castle 的轻量级 API 没有管辖限制(例如 128 位 AES 密钥)。因此,如果您想绕过这些限制,您可以将它 用于您自己的协议 没有问题的等效库)。
Also if I am using the second approach then why do I still have to add Bouncy Castle as a security provider. If I do not do so then I get a "No Such Provider" exception (...) ?
Bouncy Castle PGP 功能实际上建立在 JCA 之上;就这么简单。如果不是,您将无法使用 Java 密钥或其他(平台或硬件)加密功能。
许多其他软件组件也假设要使用 JCA。您不能简单地将轻量级 API 插入现有协议实现中。
我有一个案例需要使用 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"));
As I understand it Bouncy Castle encryption can be used in java in two ways:
I add Bouncy Castle as a provider and continue to use the standard Java libraries.
I use the classes specified in the Bouncy Castle library directly.
I wanted to know the pros and cons of both the ways and which method is recommended.
Java JCA 的设计更好,当然也有更好的文档记录 API。它具有更好定义的异常处理,更新的参数处理 (ByteBuffer
)。
此外,通过使用提供者抽象,它不仅可以通过基于软件的提供者(例如 Bouncy Castle)得到增强,还可以通过平台功能和硬件提供者得到增强。因此,如果您针对 JCA 进行编程,您将获得更灵活的运行时。
另一方面,轻量级加密 API 是一个相对较低的级别 API,它以结构相对良好的方式提供了更多的功能。如果您使用它,您基本上是在选择 Bouncy Castle 作为您唯一的功能提供者。 Bouncy Castle 仅包含 Java 代码中的特定实现,这意味着您不会获得(很多)硬件支持。
Bouncy Castle 的轻量级 API 没有管辖限制(例如 128 位 AES 密钥)。因此,如果您想绕过这些限制,您可以将它 用于您自己的协议 没有问题的等效库)。
Also if I am using the second approach then why do I still have to add Bouncy Castle as a security provider. If I do not do so then I get a "No Such Provider" exception (...) ?
Bouncy Castle PGP 功能实际上建立在 JCA 之上;就这么简单。如果不是,您将无法使用 Java 密钥或其他(平台或硬件)加密功能。
许多其他软件组件也假设要使用 JCA。您不能简单地将轻量级 API 插入现有协议实现中。