背景:在集成企微API时回调接口需要使用32位长(258bit)密钥解密服务器回传的加密信息,在代码执行至cipher.init(2, keySpec, iv)时报java.security.InvalidKeyException: Illegal key size错误。
原因:JDK受版本安全限制,默认只允许128位长度以内的。秘钥长度,如果密钥大于128, 会抛出java.security.InvalidKeyException: Illegal key size 异常. java运行时环境默认读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制所造成的的.JDK1.8之后已经兼容了该问题
解决方案:
替换JDK受限文件级配置:
1、下载文件:JCE Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 Download
2、查看系统nginx的安装位置:vim /etc/profile
3、将下载文件(local_policy.jar和US_export_policy.jar)存储到地址:
如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件
如果安装了JDK,还要将两个jar文件也放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件
注:其他解决方案请参考:JDK的AES加密异常java.security.InvalidKeyException: Illegal key size 的解决方法(已解决)-CSDN博客