前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项。目前企业号和公众号的加密方式是一致的(格式会有少量差异)。php
进入公众号后台的“开发者中心”,咱们能够看到Url对接的设置:html
点击【修改设置】,能够进入到修改页面:web
加密的方式一共有3种:算法
凡是加密的消息,返回的信息也须要通过加密。小程序
Senparc.Weixin.MP已经对三类消息做了自动判断,开发的过程当中无需关注任何解密和加密的过程,仍然保持“明文模式”下的开发过程便可。安全
对应的MessageHandler中,咱们能够经过一些参数得知目前的加密状态:服务器
messageHandler.UsingEcryptMessage:是否使用了加密信息(包括兼容模式和安全模式)微信
messageHandler.UsingCompatibilityModelEcryptMessage:是否使用了兼容模式加密信息websocket
经过上面2个属性的组合,咱们即可以知道目前帐号使用的是哪一种加密模式(固然,大多数状况下开发者已经无需关心)。微信公众平台
为了能够更好地跟踪信息,MessageHandler新加入了FinalResponseDocument这个属性:
messageHandler.ResponseDocument:明文结构的响应数据XML对象
messageHandler.FinalResponseDocument:最终会返回给服务器的XML对象,在不加密的状况下将和ResponseDocument一致,不然会自动进行加密
有关加密的算法(包括几种语言的示例下载)在官方的帮助文档里面能够找到:http://mp.weixin.qq.com/wiki/index.php?title=%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88
这里要说明一下的是EncodingAESKey,官方的解释有点绕。实际上EncodingAESKey是对AESKey的一次Base64编码处理,而AESKey是一个长度为32的随机字符串(从a-z,A-Z,0-9中选取)。因为32个字符的Base64编码长度为固定的44(最后一个字符为=),因此去掉=以后,就生成了最终的43个字符长度的EncodingAESKey。EncodingAESKey在消息加密和解密的过程当中都会用到,须要进行严格的保密。
下面是一段C#生成EncodingAESKey的代码:
protected string CreateEncodingAESKey() { string aesKey = GetRadomStr(32);//得到a-z,A-Z,0-9的随机字符串 var encodingAesKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(aesKey), Base64FormattingOptions.None); return encodingAesKey.Substring(0, encodingAesKey.Length - 1); }
地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html