
AES解密失败:初始化向量IV缺失引发的Parameters missing异常及解决方案
AES加密解密过程中,正确使用初始化向量(IV)至关重要。本文分析一个AES解密失败案例,并提供有效解决方案。
问题描述:
一段AES加密解密代码在解密阶段报错,显示java.security.InvalidKeyException: Parameters missing。代码使用AES/CBC/PKCS5Padding模式,加密时随机生成IV并与密文拼接,解密时尝试从拼接数据中提取IV再解密。然而,解密抛出Parameters missing异常。
代码片段(有问题的部分):
解密部分:
// ... 其他代码 ...byte[] removeBytes = Arrays.copyOf(decryptStr, decryptStr.length - 16);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES")); // 此处错误byte[] byteData = cipher.doFinal(removeBytes);// ... 其他代码 ...
错误原因分析:
问题在于解密时cipher.init方法的调用。AES/CBC/PKCS5Padding模式需要提供IV。代码虽然提取了IV,但cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"))只设置了密钥,缺少IV参数,导致Parameters missing异常。
解决方案:
正确调用cipher.init方法应包含密钥和IV参数:
IvParameterSpec ivParameterSpec = new IvParameterSpec(Arrays.copyOfRange(decryptStr, decryptStr.length - 16, decryptStr.length));cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), ivParameterSpec);
修改后的代码使用Arrays.copyOfRange方法正确提取IV进行解密初始化,避免Parameters missing异常。 关键在于解密时不能使用加密密钥作为IV,而必须使用加密时生成的IV。
通过以上修改,可以解决AES解密中因IV缺失导致的Parameters missing异常。 确保在加密和解密过程中始终正确处理和传递IV,才能保证AES加密解密的正常运行。
以上就是AES解密失败:初始化向量IV缺失导致Parameters missing异常如何解决?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/177034.html
微信扫一扫
支付宝扫一扫