bra*_*ves 8 android cryptography aes
我继承了使用以下密码的Android代码:
ks = new SecretKeySpec(key, "AES");
ciph = Cipher.getInstance("AES");
Run Code Online (Sandbox Code Playgroud)
由于只给出了"AES",我不知道密钥大小,模式和填充是什么.我查看了Bouncy Castle*文档,但我找不到描述"AES"实例的位置.如果可以的话,我想使用更明确的实例描述(例如"AES/ECB/PCKS5Padding").
有谁知道这个实例的密钥大小,模式和填充是什么?
谢谢!
*我读过Android使用Bouncy Castle作为其默认提供商,但我没有发现任何官方的,所以我可能在这里做一个无益的假设.
Java 默认为"AES/ECB/PKCS5Padding"默认,如 Oracle 文档所指定。
如果未指定模式或填充,则使用模式和填充方案的特定于提供者的默认值。例如,SunJCE 提供程序使用 ECB 作为默认模式,使用 PKCS5Padding 作为 DES、DES-EDE 和 Blowfish 密码的默认填充方案。这意味着在 SunJCE 提供程序的情况下:
Run Code Online (Sandbox Code Playgroud)Cipher c1 = Cipher.getInstance("DES/ECB/PKCS5Padding"); and Cipher c1 = Cipher.getInstance("DES"); are equivalent statements.
请参阅Oracle 文档中的创建密码对象。
我刚刚使用调试器自己检查过。至少对于 Android 4.0,Android 默认使用相同的加密和填充模式(如预期)。使用单个(-valued)字节的默认提供程序的结果00是一个填充的纯文本,其值为000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F十六进制。这显然是 PKCS#5 填充,或更准确地说是PKCS#7 填充,它与16 字节块密码的PKCS#5 填充相同。
原则上,任何提供程序都可以具有与默认“SunJCE”提供程序不同的默认值。但是,这会破坏假定使用 Oracle / OpenJDK 默认值的应用程序。
强烈建议不要让您的同事程序员一无所知,而是强烈建议指定包括模式和填充在内的整个字符串,并且不要依赖加密算法的默认值(除了SecureRandom,通常不建议指定算法)。
| 归档时间: |
|
| 查看次数: |
2208 次 |
| 最近记录: |