[英]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.