AES密钥大小为512不起作用

时间:2016-06-29 16:10:38

标签: java encryption react-native aes realm

我正在尝试编写一个本机模块来生成/存储用于域加密的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");

有人可以告诉我这里我做错了什么吗?

感谢。

1 个答案:

答案 0 :(得分:1)

如果要存储512位密钥"作为AES密钥",您可以存储两个256位AES密钥,例如,将它们称为LEFT和RIGHT,并在传递之前连接它们到了境界。

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

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

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