题
两行代码:
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的提供者是提供商数组中最受欢迎的。