【发布时间】: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