2

两行代码:

KeyPairGenerator.getInstance("RSA")
KeyPairGenerator.getInstance("RSA", "BC")

效果很好。那么,使用 BC 有什么区别呢?

BC 是否与使用的默认 RSA 完全兼容?(使用 Sun JDK 6)

4

3 回答 3

2

第一个构造函数的 Javadoc

返回KeyPairGenerator为指定算法生成公钥/私钥对的对象。

此方法遍历已注册的安全提供者列表,从最喜欢的提供者开始。返回一个新的 KeyPairGenerator 对象,该对象封装 来自支持指定算法的第一个 Provider的 KeyPairGeneratorSpi 实现。

请注意,可以通过该 Security.getProviders()方法检索已注册提供者的列表。

链接的 JavadocSecurity.getProviders()依次说明以下内容:

返回一个包含所有已安装提供程序的数组。数组中提供者的顺序是他们的偏好顺序。

好吧,显然,在您的情况下,BC 是“巧合”的第一个首选提供商。如果它周围有不确定性(即你想分发应用程序并且你无法控制最终用户的环境)并且你想让它坚持使用 BC,那么你应该更喜欢使用第二个构造函数。

于 2010-06-01T13:42:48.287 回答
2

BouncyCastle FAQ中有一些与 RSA 实现细节相关的条目。

我个人没有发现任何关于 Sun 和 BC 提供程序不兼容的文章,如果 BouncyCastle 依赖可以完全放弃,我建议使用 Java 的本地 RSA 实现。只有在有明确定义的好处时,您才应该添加外部依赖项。

如果您在项目的其他地方使用 BC 库,我想使用哪个提供程序并不重要。

编辑

J2ME 不包括 RSA 实现。因此,如果您计划有时将您的应用程序移植到 J2ME,BouncyCastle 库是现在的正确选择。

于 2010-06-01T14:05:35.887 回答
0

“BC”返回加密算法的 BouncyCastle 实现。

如果您不指定提供者,它将返回加密算法的“最受青睐”实现,即位置 1 的提供者是提供者数组中最受青睐的。

于 2010-06-01T13:53:51.880 回答