admin管理员组文章数量:1441360
使用加密算法报错异常:java.security.InvalidKeyException: Illegal key size
之前文章有提到过(常用对称加密算法之AES算法-CBC模式),因为需求的需要,使用到了对称加密算法AES算法,开发完毕并测试通过了,但是后来有同事反馈,当他的项目使用到加密这一步的时候就会报错。
报错信息
java.security.InvalidKeyException: Illegal key size
代码语言:javascript代码运行次数:0运行复制// 加密
public static String encrypt(String password) throws Exception {
Cipher cipher = Cipher.getInstance(INSTANCE);
SecretKeySpec keySpec = new SecretKeySpec(BYTES_KEY, AES);
// CBC模式需要生成一个16 bytes的initialization vector
SecureRandom sr = SecureRandom.getInstanceStrong();
byte[] iv = sr.generateSeed(16);
IvParameterSpec ivps = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivps);//运行到这一行时就报上面的异常
byte[] data = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8));
// IV不需要保密,把IV和密文一起返回
return DatatypeConverter.printBase64Binary(join(iv, data));
}
奇怪的是只有这个同事的有问题
查找原因
通过谷歌发现根本原因:JDK版本的不同
直接原因:
如果密钥大于128, 会抛出java.security.InvalidKeyException: Illegal key size 异常. 因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制,不同的jdk版本又有不同的长度限制
解决
这里建议直接更换JDK,现在较为普遍使用的jdk8版本,事实也证明,jdk8没有遇到这种长度限制
这里给大家提供下jdk8下载版本
MAC版 链接: 提取码: uv38
Linux版 链接: 提取码: 2f4w
Windows版 链接: 提取码: wmbk
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-07,如有侵权请联系 cloudcommunity@tencent 删除size加密算法异常keysecurity本文标签: 使用加密算法报错异常javasecurityInvalidKeyException Illegal key size
版权声明:本文标题:使用加密算法报错异常:java.security.InvalidKeyException: Illegal key size 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1747855177a2764981.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论