这可能是一个棘手的问题,但是我对提供者的工作方式感到困惑。我已经尝试阅读此https://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html,但对我来说却没有任何意义。说我们有:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC")
和
Cipher cipher= Cipher.getInstance("AES/CBC/PKCS5Padding")
根据链接,听起来好像提供程序指示正在使用的实现,但与提供程序无关,AES / CBC / PKCS5Padding是否基本相同?在该示例中,充气城堡(我猜“ BC”对应于哪个)碰巧具有比默认实现更有效的算法吗?谢谢您的宝贵时间。
答案 0 :(得分:3)
独立于AES / CBC / PKCS5Padding基本上不是相同的 提供者?
是的。
在该示例中,充气城堡(我猜“ BC”对应 碰巧拥有比默认算法更有效的算法 实施?
可能不是。特别是在AES方面,由于使用了本机AES硬件,因此最近的Oracle提供者可能比Bouncycastle快得多。
那为什么要指定提供者?
好吧,我知道您没有要求,但这似乎就是您要去的地方。在大多数情况下,您应该不指定提供程序。一般规则是避免指定提供程序,除非您有充分的理由这样做。保留提供者未指定的位置可提高可移植性。
不幸的是,在某些情况下,您可能需要指定提供程序。 JCE中提供的抽象并没有涵盖实践中出现的所有情况。如果您遇到其中之一,最好再问一个问题。