微信 AES 解密报错 Illegal key size 三种解决办法
微信 AES 解密报错 Illegal key size
Java 环境
java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
问题
问题日志
最近在迁移的服务器,在迁移完之后, 一个有关微信小程序的日志打印下面的报错信息。
c.t.b.a.c.weixin.aes.WXBizMsgCrypt - 小程序解密异常 java.security.InvalidKeyException: Illegal key size
解密失败,看了下解密的密钥是正确的,没有任何问题。 这个在 经典 下是可以运行的,在 VPC 下运行不了。 (因为最近在进行阿里云网络迁移)
问题原因
微信在进行数据传输的时候,会进行加密,微信使用的 AES 加密使用的是 256位,Java 默认使用的解密包是 local_policy.jar
和 US_export_policy.jar
,但是这个默认的只支持 128位的解密(java 版本在 1.8.0_161之后就没有这个问题了,默认是支持)。我们的版本是 1.8.0_151
正好默认是只支持 128位的解密(其实不是不支持,只是默认配置的不支持)。
解决办法
在前面我们没有提及一个东西,就是在/usr/local/java/jdk1.8.0_151/jre/lib/security/policy/
下有两个目录。
[root@djx-117106 policy]# pwd /usr/local/java/jdk1.8.0_151/jre/lib/security/policy/ [root@djx-117106 policy]# ls -l total 8 drwxr-xr-x 2 root root 4096 Nov 2 10:47 limited drwxr-xr-x 2 root root 4096 Nov 2 10:47 unlimited [root@djx-117106 policy]# ls -l ./limited/ total 8 -rw-r--r-- 1 root root 3405 Jul 4 19:41 local_policy.jar -rw-r--r-- 1 root root 2920 Jul 4 19:41 US_export_pol