jdk1.8.0_151 java.security.InvalidKeyException: Illegal key size
调用第三方接口,对数据进行AES加密时,报错如下:
java.security.InvalidKeyException: Illegal key size
1、为什么会出现这个报错?
JDK中包含有JRE(Java Runtime Environment,即:Java运行环境),JRE中包括Java虚拟机(Java Virtual Machine)、Java核心类库和支持文件,而我们今天要说的主角就在Java的核心类库中。在Java的核心类库中有一个JCE(Java Cryptography Extension),JCE是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现,所以这个是实现加密解密的重要类库。
在我们安装的JRE目录下有这样一个文件夹:%JAVE_HOME%\jre\lib\security(%JAVE_HOME%是JDK安装路径),其中包含有两个.jar文件:”local_policy.jar”和”US_export_policy.jar”,这两个jar包就是我们JCE中的核心类库了。JRE中自带的”local_policy.jar”和”US_export_policy.jar”是支持128位密钥的加密算法,而当我们要使用256位密钥算法的时候,已经超出它的范围,无法支持,所以才会报:”java.security.InvalidKeyException: Illegal key size”的异常。
2、解决方案
一般针对jdk1.6,jdk1.7, jdk1.8,这个问题可以去博客 https://blog.csdn.net/dafeige8/article/details/76019911 找到解决方案,需要下载对应的”local_policy.jar”和”US_export_policy.jar”两个文件替换掉自己%JAVE_HOME%\jre\lib\security文件夹下对应的原文件;
不过针对jdk1.8.0_151版本稍微不一样,%JAVE_HOME%\jre\lib\security下多了个policy文件夹:
policy下有2个文件夹limited和unlimited:
├── limited
│ ├── local_policy.jar
│ └── US_export_policy.jar
└── unlimited
├── local_policy.jar
└── US_export_policy.jar
从Java 1.8.0_151和1.8.0_152开始, 提供了 无限制强度管辖策略, 默认是不启用的,简单修改下配置即可启用:
在 %JAVE_HOME%\jre\lib\security 文件夹下找到 java.security 文件,在826行左右会有如下配置:
1 |
|
去掉前面的#,重启Java应用即可。