最近在做微信支付,在微信支付中使用退款接口时发现了java.security.InvalidKeyException: Illegal key size or default parameters这个异常,经过排查和网络搜索发现是因为解密微信的加密字符串中的出现的问题。其实,之前也遇到过,但是没有整理成文档,所以二次踩坑了。
为了数据代码在传输过程中的安全,很多时候我们都会将要传输的数据进行加密,然后等对方拿到后再解密使用。我们在使用AES加解密的时候,在遇到128位密钥加解密的时候,没有进行什么特殊处理;然而,在使用256位密钥加密解密时,如果不进行特殊处理的话,往往会出现这个异常java.security.InvalidKeyException: Illegal key size,这个问题是因为美国的出口限制而产生的。
【解决方案】:
Oracle在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),我们只需要将其部署在JRE环境中,就可以解决限制问题。
文件下载地址:
JDK7的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK8的下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt
然后进入到你的服务器或者你电脑的%JDK_Home%\jre\lib\security目录下,找到ocal_policy.jar和US_export_policy.jar这2个文件,覆盖local_policy.jar和US_export_policy.jar这两个文件;
然后重启你的应用即可解决问题。