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