我正在尝试编写一个本机模块来生成/存储用于域加密的AES密钥。对于我写的测试应用程序(当我使用512密钥大小时),我得到以下异常:
线程中的异常" main" java.security.InvalidParameterException:错误的密钥大小:必须等于128,192或256
at com.sun.crypto.provider.AESKeyGenerator.engineInit(AESKeyGenerator.java:93)
在javax.crypto.KeyGenerator.init(KeyGenerator.java:517)
在javax.crypto.KeyGenerator.init(KeyGenerator.java:494)
我使用的代码是:
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(512);
SecretKey secretKey = keyGen.generateKey();
final int AES_KEYLENGTH = 512;
byte[] iv = new byte[AES_KEYLENGTH / 8];
SecureRandom prng = new SecureRandom();
prng.nextBytes(iv);
Cipher aesCipherForEncryption = Cipher.getInstance("AES/CBC/PKCS7PADDING");
有人可以告诉我这里我做错了什么吗?
感谢。
答案 0 :(得分:1)
如果要存储512位密钥"作为AES密钥",您可以存储两个256位AES密钥,例如,将它们称为LEFT和RIGHT,并在传递之前连接它们到了境界。
正如其他人在评论中指出的那样,AES确实不拥有512位密钥。它可能会说他们正在使用AES-256加密,但我怀疑它在任何地方使用 512位,AES 密钥。
我怀疑,正如@Artjom B.在评论中提到的那样,它确实是一对256位密钥,一个用于加密,一个用于mac(例如HMAC)。
如果要创建512位密钥,可以使用SecureRandom。 SecureRandom无法为AES密钥提供KeyGenerator没有什么特别之处。您只是想确保使用加密强随机数据。