java - 在 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”对应的)是否恰好具有比默认实现更有效的算法?感谢您的时间。
解决方案
AES/CBC/PKCS5Padding 不独立于提供者基本相同吗?
是的。
在示例中,充气城堡(我猜“BC”对应的)是否恰好具有比默认实现更有效的算法?
可能不是。特别是在 AES 的情况下,最近的 Oracle 提供商可能比 Bouncycastle 快得多,因为他们使用了可用的本地 AES 硬件。
那么为什么要指定提供者呢?
好吧,我知道你没有问这个,但这似乎是你要去的地方。在大多数情况下,您不应指定提供者。一般规则是避免指定提供者,除非您有充分的理由这样做。不指定提供者会增加可移植性。
不幸的是,在某些情况下,您可能需要指定提供程序。JCE 中提供的抽象并未涵盖实践中出现的所有情况。如果您遇到其中一个问题,最好单独提出一个问题。
推荐阅读
- ionic-framework - 如何在使用 Ionic 移动应用程序时向用户显示说明?
- android - 小米米 5X 设备将 Firebase 令牌返回为 BLOCKLISTED
- php - 在嵌套关系上添加 where 条件
- flutter - 如何在 Flutter 中创建弯曲的 bottomBar?
- css - 文本区域未填充 div
- api - 如何使用patch的测试操作使用scim更新ldap属性值
- c# - Epplus 是否支持通过 office open xml 设置工作表数据/单元格值?
- python - Project Euler 8 程序未提供正确答案
- javascript - react-native:如何检查是否所有图像都添加到数组中
- r - 如何在 ggplot 生成的时间图中在 x 轴上显示每个年度季度