假设我使用提供程序 A 使用 AES 加密,我可以使用提供程序 B 解密相同吗?
问问题
214 次
3 回答
2
是的,但您不仅应该指定算法 ( AES
),还应该指定模式和填充(例如AES/ECB/PKCS5Padding
)。
JCA参考指南说:
(创建密码对象)如果未指定模式或填充,则使用模式和填充方案的特定于提供者的默认值。例如,SunJCE 提供程序使用 ECB 作为默认模式,PKCS5Padding 作为 DES、DES-EDE 和 Blowfish 密码的默认填充方案。这意味着在 SunJCE 提供者的情况下:
Cipher.getInstance("DES")
和Cipher.getInstance("DES/ECB/PKCS5Padding")
是等效的语句。
如果您只指定AES
,则可能是其他提供者实现了不同的默认值,这将不起作用(例如,您将使用 CBC 加密并使用 ECB 解密)。
于 2013-03-20T15:37:20.990 回答
1
是的,它是标准化算法,填充和操作模式等内容需要在两个提供商上设置相同,以便您能够解密。
于 2013-03-20T03:25:24.173 回答
0
大概。早期的 AES 有许多算法被抛出。我记得一个支持两种鱼变体的程序。成为标准的是 Rijndael。这些天,除非另有说明,否则您可以假设 AES 实际上是 AES-Rijndael。如果它指定了任何其他 AES 算法,比如两条鱼,你就会遇到麻烦。
于 2013-03-20T04:15:52.277 回答