繁体   English   中英

将“AES”指定为KeyGenerator.getInstance()中的算法究竟做了什么?

[英]What exactly does specifying “AES” as the algorithm in KeyGenerator.getInstance() do?

我很困惑为什么在生成加密密钥时需要指定一个算法,如“AES”,例如..

KeyGenerator kg = KeyGenerator.getInstance("AES");

它显然不用于指定密钥的大小,因为AES密钥可以是128,192或256位。 那部分将通过init()来完成......

kg.init(256, new SecureRandom());
SecretKey key = kg.generateKey();

对于它的价值,上面的示例代码来自http://android-developers.blogspot.de/2013/02/using-cryptography-to-store-credentials.html

此外,NIST FIPS-197声明......

没有为AES算法识别弱密钥或半弱密钥,并且对密钥选择没有限制。

...这样会让我相信任何 128,192或256位都可以用作密钥。

显然,当我获得密码实例时指定“AES”,例如..

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

...表示要使用的密码算法是必要的。 我只是没有得到为密钥生成指定它的目的。

谢谢。

如评论中所述,除AES之外的其他键可能需要更多关注。 最好采用DES和AES的对称方法,以便在算法之间切换。

此外,并非所有加密提供程序都可以在内存中创建密钥。 Java JCA还与硬件密钥库兼容。 对于PKCS#11提供程序(例如),在生成密钥时需要知道密钥的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM