首页 > 解决方案 > 在 Java AES 加密中使用提供者

问题描述

这可能是一个菜鸟问题,但我对提供商的工作方式感到困惑。我已经尝试阅读此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”对应的)是否恰好具有比默认实现更有效的算法?感谢您的时间。

标签: javaencryptioncryptographybouncycastle

解决方案


AES/CBC/PKCS5Padding 不独立于提供者基本相同吗?

是的。

在示例中,充气城堡(我猜“BC”对应的)是否恰好具有比默认实现更有效的算法?

可能不是。特别是在 AES 的情况下,最近的 Oracle 提供商可能比 Bouncycastle 快得多,因为他们使用了可用的本地 AES 硬件。

那么为什么要指定提供者呢?

好吧,我知道你没有问这个,但这似乎是你要去的地方。在大多数情况下,您不应指定提供者。一般规则是避免指定提供者,除非您有充分的理由这样做。不指定提供者会增加可移植性。

不幸的是,在某些情况下,您可能需要指定提供程序。JCE 中提供的抽象并未涵盖实践中出现的所有情况。如果您遇到其中一个问题,最好单独提出一个问题。


推荐阅读