故障描述
使用这个加密时候就出现 Illegal key size 错误,查阅资料知道了如果密钥大于128, 会抛出上述异常。因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件,文件位于/jre/lib/security下, 这种限制是因为美国对软件出口的控制。
Java 默认使用的解密包是 local_policy.jar 和 US_export_policy.jar,但是这个默认的只支持 128位的解密(java 版本在 1.8.0_161之后就没有这个问题了,默认是支持)。我们的版本是 1.8.0_151 正好默认是只支持 128位的解密(其实不是不支持,只是默认配置的不支持)。
[root@localhost ~]# java -versionjava version \"1.8.0_151\"Java(TM) SE Runtime Environment (build 1.8.0_151-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
解决方法
- 方法一
[root@localhost ~]# cd /usr/local/jdkjdk/ jdk1.8.0_151/[root@localhost ~]# cd /usr/local/jdk1.8.0_151/[root@localhost jdk1.8.0_151]# sed -i \'s/^#crypto.policy.*/crypto.policy=unlimited/g\' /usr/local/jdk/jre/lib/security/java.security
- 方法二
[root@localhost jdk1.8.0_151]# tar czf policy_limited.tar.gz jre/lib/security/policy/limited/[root@localhost jdk1.8.0_151]# cp -aR jre/lib/security/policy/unlimited/* jre/lib/security/policy/limited/cp:是否覆盖\"jre/lib/security/policy/limited/local_policy.jar\"? ycp:是否覆盖\"jre/lib/security/policy/limited/US_export_policy.jar\"? y
再次
java -jar
运行jar包,正常。