512 的 AES 密钥大小不起作用

AES key size of 512 doesn't work

我正在尝试将本机模块写入 generate/store AES 密钥以进行领域加密。对于我编写的测试应用程序(当我使用 512 密钥大小时),出现以下异常:

Exception in thread "main" java.security.InvalidParameterException: Wrong keysize: must be equal to 128, 192 or 256
at com.sun.crypto.provider.AESKeyGenerator.engineInit(AESKeyGenerator.java:93)
at javax.crypto.KeyGenerator.init(KeyGenerator.java:517)
at 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 位密钥 "as an AES key",您可以只存储两个 256 位 AES 密钥,例如将它们命名为 LEFT 和 RIGHT,并在传递给 Realm 之前将它们连接起来。

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

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

如果您想创建一个 512 位密钥,您可以只使用 SecureRandom。 SecureRandom 无法为 AES 密钥提供的 KeyGenerator 没有什么特别之处。您只是想确保您使用的是加密强度 随机数据。