gpt4 book ai didi

cryptography - Android中 "AES"密码的含义?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:55:02 25 4
gpt4 key购买 nike

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

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

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

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

谢谢!

*我读到过 Android 使用 Bouncy CaSTLe 作为其默认提供程序,但我没有在任何官方网站上找到它,因此我可能会在这里做出无用的假设。

最佳答案

Java 默认为 "AES/ECB/PKCS5Padding",如 Oracle 文档所述。

If no mode or padding is specified, provider-specific default valuesfor the mode and padding scheme are used. For example, the SunJCEprovider uses ECB as the default mode, and PKCS5Padding as the defaultpadding scheme for DES, DES-EDE and Blowfish ciphers. This means thatin the case of the SunJCE provider:

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

参见 creating a Cipher object在 Oracle 文档中。


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


原则上,任何提供者都可以具有与默认“SunJCE”提供者不同的默认值。但是,这会破坏假定使用 Oracle/OpenJDK 默认值的应用程序。

不要让你的同事程序员蒙在鼓里,强烈建议指定整个字符串,包括模式和填充,并且不依赖默认值用于加密算法(除外) SecureRandom,通常不推荐指定算法)。

关于cryptography - Android中 "AES"密码的含义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13771186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com