java - AES - 生成 key 并加载它会产生无效 key 异常

标签 java android cryptography aes

一段时间以来,我一直在尝试使用 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/

相关文章:

c++ - 无法用 BER 解码 RSA 公钥

javascript - Node JS : Validate certificate in DER format

java - Java中如何将数组转换为集合?

java - MySQL 语法错误 - Java

java - 在服务器端运行 javascript

java - 将图片从 Android java 应用程序上传到 Codeigniter

c++ - 从证书中获取 "Key Usage"

java - 在 Firebase 中仅下载部分数据库引用?

android - 我如何让我的谷歌地图应用程序开始缩放我当前的位置

Android 在 RecyclerView 上使用多个不同的行来实现数据绑定(bind)功能