java.security.InvalidKeyException:Illegal key size解决方案
产生错误原因
为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行加密,然后等对方拿到后再解密使用。我们在使用AES加解密的时候,在遇到128位密钥加解密的时候,没有进行什么特殊处理;然而,在使用256位密钥加解密的时候,如果不进行特殊处理的话,往往会出现这个异常
为什么会产生这样的错误
我们做Java开发,或是Android开发,都会先在电脑上安装JDK(Java Development Kit) 并配置环境变量,JDK也就是 Java 语言的软件开发工具包,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%
是自己电脑的Java路径,一版默认是:C:\Program Files\Java
,具体看自己当时安装JDK和JRE时选择的路径是什么),其中包含有两个.jar文件:local_policy.jar
和US_export_policy.jar
,也就是我们平时说的jar包,再通俗一点说就是Java中包含的类库(Sun公司的程序大牛封装的类库,供使用Java开发的程序员使用),这两个jar包就是我们JCE中的核心类库了。JRE中自带的local_policy.jar
和US_export_policy.jar
是支持128位密钥的加密算法,而当我们要使用256位密钥算法的时候,已经超出它的范围,无法支持,所以才会报:java.security.InvalidKeyException: Illegal key size or default parameters
的异常
解决方案
去官方下载JCE无限制权限策略文件
1.8.0_151以上版本的解决方案
JDK1.8.0_151无需去官网下载 local_policy.jar
US_export_policy.jar
这个jar包,只需要修改Java\jdk1.8.0_151\jre\lib\security
这目录下的java.security
文件配置即可
默认情况下,您应该能找到一条注释掉的行:
1 | #crypto.policy=unlimited |
您可以通过取消注释该行来启用无限制,删除#
:
1 | crypto.policy=unlimited |
现在重新启动指向JVM的Java应用程序即可