Java开发微信V3支付报错java.security.InvalidKeyException: Illegal key size – 解决方案(JCE无限制权限策略文件)

  • Post author:
  • Post category:java


一、本人问题发现场景

再对接微信收付通的产品时需要对部分数据就行加密解密,发现会报以下错误Illegal key size

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)

此错误原因时因为jdk默认是不允许进行256位密钥的AES加解密,解决的办法有两种情况,跟jdk的版本有关,暂时我遇到问题分为两个,一个是jdk1.8.151以前的版本和jdk1.8.151及以后的版本,本人解决方法如下。

二、解决方案

1.jdk1.8.151之前的版本

在这个版本之前的djk需要替换$JAVA_HOME/jre/lib/security目录下的权限文件,下载好文件之后直接替换文件即可,如下图。


官方网站提供了JCE无限制权限策略文件的下载:

JDK6的下载地址:


Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6

JDK7的下载地址:


Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7 Download

JDK8的下载地址:


JCE Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8 Download

2.jdk1.8.151及以后的版

找到$JAVA_HOME/jre/lib/security目录下的java.security文件,打开这个文件,设置crypto.policy=unlimited即可,

crypto.policy=unlimited

如下图:

三、总结

微信V3支付遇到的坑较多,微信收付通遇到的坑更多,欢迎相互讨论~~



版权声明:本文为m0_38075227原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。