jus*_*ker 0 java encryption cryptography bouncycastle
这可能是一个菜鸟问题,但我对提供商的工作方式感到困惑。我尝试阅读此https://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html,但它对我来说不太有意义。假设我们有:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC")
Run Code Online (Sandbox Code Playgroud)
和
Cipher cipher= Cipher.getInstance("AES/CBC/PKCS5Padding")
Run Code Online (Sandbox Code Playgroud)
根据链接,听起来提供商指示了正在使用的实现,但 AES/CBC/PKCS5Padding 基本上与提供商无关吗?在这个例子中,充气城堡(我猜“BC”对应的)是否碰巧有比默认实现更有效的算法?感谢您的时间。
AES/CBC/PKCS5Padding 不是基本上相同的,独立于提供商吗?
是的。
在这个例子中,充气城堡(我猜“BC”对应的)是否碰巧有比默认实现更有效的算法?
可能不会。特别是在 AES 的情况下,最近的 Oracle 提供商可能比 Bouncycastle 快得多,因为他们使用可用的本机 AES 硬件。
那么为什么要指定提供者呢?
好吧,我知道你没有问这个,但这似乎就是你要去的地方。在大多数情况下,您不应指定提供者。一般规则是避免指定提供者,除非您有充分的理由这样做。不指定提供者可以提高可移植性。
不幸的是,在我遇到的某些情况下,您可能需要指定提供者。JCE 中提供的抽象并不能涵盖实践中出现的所有情况。如果您遇到其中之一,最好单独提出问题。