前不久,微信的企業號使用了強制的消息加密方式,隨後公衆號也加入了可選的消息加密選項。目前企業號和公衆號的加密方式是一致的(格式會有少量差異)。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