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文件夹:
java security

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
#crypto.policy=unlimited

去掉前面的#,重启Java应用即可。


jdk1.8.0_151 java.security.InvalidKeyException: Illegal key size
https://river106.cn/posts/fa1e9a7f.html
作者
river106
发布于
2022年3月19日
许可协议