使用加密算法报错异常: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