在KeyGenerator.getInstance()中指定"AES"算法到底有什么作用?



我很困惑,为什么我需要指定一个算法,如"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提供程序(例如),在生成密钥时需要知道密钥的类型。

相关内容

  • 没有找到相关文章

最新更新