Android中“AES”密码的含义?

时间:2012-12-07 19:36:54

标签: cryptography android aes

我继承了使用以下密码的Android代码:

ks = new SecretKeySpec(key, "AES");
ciph = Cipher.getInstance("AES");

由于只给出了“AES”,我不知道密钥大小,模式和填充是什么。我查看了Bouncy Castle *文档,但我找不到描述“AES”实例的位置。如果可以的话,我想使用更明确的实例描述(例如“AES / ECB / PCKS5Padding”)。

有谁知道这个实例的密钥大小,模式和填充是什么?

谢谢!

*我读过Android使用Bouncy Castle作为其默认提供商,但我没有发现任何官方的,所以我可能在这里做出一个无益的假设。

2 个答案:

答案 0 :(得分:4)

默认情况下,Java默认为"AES/ECB/PKCS5Padding",由Oracle文档指定。

  

如果未指定模式或填充,则提供者特定的默认值   用于模式和填充方案。例如,SunJCE   provider使用ECB作为默认模式,并将PKCS5Padding作为默认模式   DES,DES-EDE和Blowfish密码的填充方案。这意味着   就SunJCE提供商而言:

Cipher c1 = Cipher.getInstance("DES/ECB/PKCS5Padding"); and
Cipher c1 = Cipher.getInstance("DES"); are equivalent statements.

请参阅Oracle文档中的creating a Cipher object


我刚刚使用调试器进行了检查。至少对于Android 4.0,似乎Android默认采用相同的加密和填充模式(如预期的那样)。使用单个(00 - 值)字节的默认提供程序的结果是填充的纯文本,其值为000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F,以十六进制表示。这显然是PKCS#5填充,或者对于16字节分组密码更正确PKCS#7 padding which is the same padding as PKCS#5

答案 1 :(得分:1)

据我所知,在java中,它代表AES模式ECB中的without padding 。而且我认为它在Android上是一样的。我建议你运行一个简单的测试加密android上的东西,并使用Java或android使用AES/ECB/NoPadding解密它。另外,如果你在这个应用程序中没有看到任何IV,那么就是另一个,指向这个方向。