JCE无限制权限策略文件(java.security.InvalidKeyException: Illegal key size解决方案)

时间:2024-04-04 14:07:09

问题背景

今天调试售票系统的加密,发现加密解密再JDK10下面是ok的,再JDK8下面就GG了,搞了半天,后来发现,原来另有原因,是个坑。

Exception in thread "main" java.security.InvalidKeyException: Illegal key size
	at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)
	at javax.crypto.Cipher.implInit(Cipher.java:805)
	at javax.crypto.Cipher.chooseProvider(Cipher.java:864)
	at javax.crypto.Cipher.init(Cipher.java:1396)
	at javax.crypto.Cipher.init(Cipher.java:1327)
	at com.software.dev.util.MainEntrance.Encrypt(MainEntrance.java:83)
	at com.software.dev.util.MainEntrance.main(MainEntrance.java:23)

听说,在使用JCE加密时java.security.InvalidKeyException:illegal Key Size这个报错是因为用到了jdk sercurity, 而jdk sercurity 使用的jar包 $JAVA_HOME/jre/lib/security/local_policy.jar$JAVA_HOME/jre/lib/security/US_export_policy.jar中有对技术出口的限制,限制了加密只有128bit,而没有限制的则有256bit。

解决方案

贸易战争是无情的,但Oracle还是假装很贴心的再官网给我们提供了解决方案:

JCE无限制权限策略文件(java.security.InvalidKeyException: Illegal key size解决方案)
下载后,覆盖到$JAVA_HOME/jre/lib/security中去,主要是local_policy.jarUS_export_policy.jar
JCE无限制权限策略文件(java.security.InvalidKeyException: Illegal key size解决方案)

  • 如果处理的是JRE,将两个jar文件放到%JRE_HOME%\lib\security下覆盖原来文件即可(最好先备份)。
  • 如果处理的是JDK,将两个jar文件也放到%JDK_HOME%\jre\lib\security下覆盖原来文件即可(最好先备份)

最后,别忘了验证是否成功,如果没报错就ok了
Process finished with exit code 0