【问题标题】:AES key size of 512 doesn't work512 的 AES 密钥大小不起作用
【发布时间】:2016-06-29 16:10:38
【问题描述】:

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

谁能告诉我我在这里做错了什么?

谢谢。

【问题讨论】:

  • AES 目前只接受 128、192 或 256
  • 没错!但领域需要一个 512 位密钥来加密数据库。这不是生成加密密钥的正确方法吗?
  • @user4122421 我对领域一无所知,但我怀疑您需要传入的密钥被拆分为 AES 密钥和 MAC 密钥。它也有可能完全用于 AES,预计是 64 个十六进制编码字符。
  • 你想做什么? first thing in the documentation 准确展示了如何生成和设置 512 位密钥。
  • @ArtjomB 链接的文档。甚至说它正在使用 AES-256 加密。

标签: java encryption react-native aes realm


【解决方案1】:

如果您想将 512 位密钥“作为 AES 密钥”存储,您可以只存储两个 256 位 AES 密钥,例如将它们称为 LEFT 和 RIGHT,然后在传递给 Realm 之前将它们连接起来。

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

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

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

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 2015-05-04
    • 2017-08-28
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多