AES 密钥大小 512 不起作用



我正试图编写一个本地模块来生成/存储用于领域加密的AES密钥。对于我编写的测试应用程序(当我使用512键大小时),我得到了以下异常:

线程"main"异常java.security.InvalidParameterException:错误的密钥大小:必须等于128,192或256
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");

谁能让我知道我在这里做错了什么?

谢谢。

如果你想将一个512位的密钥"作为AES密钥"存储,你可以只存储两个256位的AES密钥,例如,将它们称为LEFT和RIGHT,并在传递给Realm之前将它们连接起来。

正如其他人在评论中指出的那样,AES的没有具有512位密钥。它可能说他们正在使用AES-256加密,但我怀疑它说他们正在使用512位AES密钥。

我怀疑,正如@Artjom B.在评论中提到的,它真的是一对256位密钥,一个用于加密,一个用于mac(例如HMAC)。

如果你想创建一个512位的密钥,你可以使用SecureRandom。KeyGenerator没有任何SecureRandom不能为AES密钥提供的特殊功能。您只需要确保您使用的是密码学强的随机数据。

最新更新