今天心血来潮就信手拈来学了下微信消息加解密的知识,忽然觉得微信真的好强大。可能在大部分项目微信消息的加解密都用不上,但是仍然不排除有使用到的情况,如涉及金钱方面的微信应用包括商城类、金融类还有其他安全级别要求很高的微信应用。针对这些情况我觉得还是有必要分享下我的学习心得。
一 功能概述
公众号消息加解密是公众平台为了进一步加强公众号安全保障,提供的新机制。开发者需注意,公众账号主动调用API的情况将不受影响。只有被动回复用户的消息时,才需要进行消息加解密。具体包括:
1.新增消息体签名验证,用于公众平台和公众账号验证消息体的正确性
2.针对推送给微信公众账号的普通消息和事件消息,以及推送给设备公众账号的设备消息进行加密
3.公众账号对密文消息的回复也要求加密 这段文字描述摘抄至微信公众平台开发者文档,从上面的描述可以看出消息加密旨在提高安全性。
二 公众平台如何设置消息加解密
点击左侧的开发者中心,找到相关的配置项即可,如下所示
三 编程实现
消息加解密支持的开发语言还是挺多的如java、C++、C#、php等,鉴于本人只懂java,因此代码部分将会全部使用java
1 有关消息加解密的关键代码
代码微信公众平台提供了下载链接,但是由于java开发环境的复杂性,直接使用微信提供的jar包会出现问题,因此不建议使用jar包而是直接使用源码,下面是用于加密的代码下载链接
2 代码编写之前的注意事项
(1)替换JCE策略文件
这主要是因为采用AES加密时,如果密钥长度大于128,会抛异常:java.security.InvalidKeyException: Illegal key size。下面是JCE的下载地址:
Java版本JCE无限制权限策略文件下载地址
1.8http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
1.7http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
1.6http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
下载后替换%JDK_HOME%\jre\lib\security目录下对应的文件。
(2)使用微信提供的源代码
首先把zip解压缩,之后复制commons-codec这个jar包到项目,之后复制src下面的源代码粘贴到src下面
3 微信消息加解密需调整的代码
(1) 新增处理用户请求消息的2组方法
public static WXBizMsgCrypt getWxCrypt() {
WXBizMsgCrypt crypt=null;
try {
crypt = new WXBizMsgCrypt(SignUtil.token,"xxxxx","xxxxx");
<