两行代码:

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

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

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

有帮助吗?

解决方案

Bouncycastle常见问题解答 有一些与RSA实施详细信息有关的条目。

我个人还没有发现有关Sun和BC提供商不兼容的任何文章,我建议如果可以完全放弃Bouncycastle的依赖,则使用Java的本机RSA实现。仅当从中有明确的好处时,才应该添加外部依赖关系。

如果您在项目中的其他地方使用BC库,我想使用哪个提供商无关紧要。

编辑

J2ME不包括RSA实施。因此,如果您有时打算将应用程序移植到J2ME,那么Bouncycastle库是现在的正确方法。

其他提示

来自 第一构建器的Javadoc:

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

此方法遍历注册安全提供商的列表,从最喜欢的提供商开始。封装Keypairgeneratorspi实现的新型Keypairgenerator对象 从支持指定算法的第一个提供商返回.

请注意,可以通过 Security.getProviders() 方法。

链接的Javadoc Security.getProviders() 反过来陈述以下内容:

返回包含所有已安装提供商的数组。 阵列中提供商的顺序是其优先顺序。

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

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

如果您没有指定提供商,它将返回加密算法的“最预先授予”实现,即位置1的提供者是提供商数组中最受欢迎的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top