报错提示 我有一个代码解密的,在本地环境报错 ,测试环境不报错,为什么呢 ,报错信息如下 ERROR 34168 --- [er-pull-thread2] c.t.o.o.c.c.utils.AES256EncryptionUtils : 解密失败,失败原因:InvalidKeyException: Illegal key size cn.hutool.crypto.CryptoException: InvalidKeyException: Illegal key size at cn.hutool.crypto.symmetric.SymmetricCrypto.encrypt(SymmetricCrypto.java:277) at com.xx.oms.order.core.common.utils.AES256EncryptionUtils.encrypt(AES256EncryptionUtils.java:38)
关于 AES256 解密报错 "Illegal key size" 的分析
这个错误是由于 Java 加密策略限制导致的,具体原因和解决方案如下:
错误原因
InvalidKeyException: Illegal key size 错误表明您的本地 Java 环境缺少对 256 位 AES 加密的支持。这是因为:
-
Java 默认安装包含的是"有限强度管辖策略文件",它限制了加密密钥的长度
-
测试环境可能已经安装了"无限强度管辖策略文件",所以不会报错
解决方案
方法一:安装 JCE 无限强度管辖策略文件(推荐)
-
下载 JCE 无限强度管辖策略文件:
-
对于 Java 8: Oracle 官方下载
-
-
解压下载的文件,你会找到两个 jar 文件:
-
local_policy.jar -
US_export_policy.jar
-
-
替换你本地 Java 安装目录下的这些文件:
-
路径通常是
$JAVA_HOME/jre/lib/security/
-
-
重启你的应用程序
方法二:降低加密强度(不推荐)
如果你无法修改 JCE 策略文件,可以改用 AES-128 加密(但安全性降低)
方法三:检查 Java 版本
确保测试环境和本地环境使用相同版本的 Java,因为不同版本的 JCE 策略可能不同
验证
替换文件后,你可以运行以下代码验证是否成功:
java
import javax.crypto.Cipher;
public class CheckCrypto {
public static void main(String[] args) throws Exception {
int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
System.out.println("Max AES key length: " + maxKeyLen);
// 如果输出 2147483647,则表示无限制
}
}
如果输出 2147483647,则表示无限强度策略已生效。


4608

被折叠的 条评论
为什么被折叠?



