一段时间以来,我一直在尝试使用 Java 进行 AES 加密和解密。不幸的是我没有太多运气。现在我可以用一种方法生成 key ,代码已显示
keyGen = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance();
keyGen.init(size, random);
SecretKey key = keyGen.generateKey();
AesKey = key.getEncoded();
为了使用 key ,我将其转换回 SecretKeySpec 并尝试加密输入字节。我的加密代码如下所示。
SecretKeySpec keySpec = new SecretKeySpec(AesKey, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
return cipher.doFinal(input);
但是,当我调用 cipher.init 行时,我得到一个 InvalidKeyException。
我是否错误地生成了 key ?我是否错误地加载了 key ?是组合吗?我一直坚持这一点,所以任何见解都将不胜感激。
更新
所以我没有意识到,调用生成函数的部分传入了一个无效的大小。当我找到那部分代码并将其更改为 256 时,一切正常。
最佳答案
调用生成函数的代码传递了一个无效的大小。我以为那会被 keyGen.generateKey() 行捕获,但我错了。直到我真正尝试使用 key 时,它才抛出错误。更改调用生成函数的代码,使大小为 256 解决了这个问题。
关于java - AES - 生成 key 并加载它会产生无效 key 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566925/