微信第三方平台授权加解密信息相关问题(Java,Linux)
一、问题一:在window本地模拟测试接收component_verify_ticket信息: 验签->解密->保存tikcet 成功。把项目部署到linux服务器,测试失败,报错:aes解密失败看了《微信加密解密方案》的示例代码,readme,如下:
解决思路一:初步怀疑是jar包版本问题,
我的项目依赖版本为1.10,如下,所以我把版本更改为1.9....重新部署到服务器,然后。。重新等待微信官方服务推送ticket来,验签用过->解密失败,ase解密失败??为什么在window上测试通过,在linux服务器却不行呢?并且验证签名成功,解密密文失败。 jdk版本都是1.8,排除jdk版本问题。难道是liunx 和 window 关于aes的加密解密生成信息由换行或空格差别?(否决猜测,非该原因造成),一度怀疑人生,就我遇到这个问题?
后来,看到一篇文章(点我)给出解释:
Java几乎各种常用加密算法都能找到对应的实现。因为美国的出口限制,Sun通过权限文件(local_policy.jar、US_export_policy.jar)做了相应限制。因此存在一些问题:
●密钥长度上不能满足需求(如:java.security.InvalidKeyException: Illegal key size or default parameters);
●部分算法未能支持,如MD4、SHA-224等算法;
●API使用起来还不是很方便;一些常用的进制转换辅助工具未能提供,如Base64编码转换、十六进制编码转换等工具。 Oracle在其官方网站上提供了无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files),我们只需要将其部署在JRE环境
中,就可以解决限制问题。
解决方法:
JDK8 jar包下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
JDK7 jar包下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK6 jar包下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
把里面的两个jar包:local_policy.jar 和 US_export_policy.jar 替换掉原来jdk安装目录XXX\Java\jre6\lib\security 下的两个jar包接可以了
然后重启服务,等待微信服务推送 平台ticket....
成功验签,解密,并获得tikcet,保存到数据库,ok,解决。