0

假设我使用提供程序 A 使用 AES 加密,我可以使用提供程序 B 解密相同吗?

4

3 回答 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 回答