博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
阅读量:6900 次
发布时间:2019-06-27

本文共 1460 字,大约阅读时间需要 4 分钟。

前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项。目前企业号和公众号的加密方式是一致的(格式会有少许差别)。

加密设置

  进入公众号后台的“开发者中心”,我们可以看到Url对接的设置:

  

  点击【修改设置】,可以进入到修改页面:

  

  加密的方式一共有3种:

  • 明文模式,即原始的消息格式
  • 兼容模式,明文、密文将共存,正式发布的产品不建议使用(因为仍然包含了明文,达不到加密的效果)
  • 安全模式,这种模式下消息将会被加密,开发者的服务器可以通过官方给出的算法进行解密,得到明文模式下的消息原文。

  凡是加密的消息,返回的信息也需要经过加密。

处理加密信息

  Senparc.Weixin.MP已经对三类消息作了自动判断,开发的过程中无需关注任何解密和加密的过程,仍然保持“明文模式”下的开发过程即可。

  对应的中,我们可以通过一些参数得知目前的加密状态:

  messageHandler.UsingEcryptMessage:是否使用了加密信息(包括兼容模式和安全模式)

  messageHandler.UsingCompatibilityModelEcryptMessage:是否使用了兼容模式加密信息

  通过上面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的代码:

1
2
3
4
5
6
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://igsdl.baihongyu.com/

你可能感兴趣的文章
最大子数组
查看>>
用telnet命令,POP3接收邮件
查看>>
Nginx 关于 location 的匹配规则详解
查看>>
OutputStream、InputStream 、FileOutputStream、FileInputStream,字节流API
查看>>
10. Python面向对象
查看>>
python3与 python2 urllib模块区别
查看>>
关于props 和state
查看>>
跟我学算法-tensorflow 实现线性拟合
查看>>
redis使用管道pipeline提升批量操作性能(php演示)
查看>>
python: file_handling 解决工作中出现的文件处理需求
查看>>
HTML5 拖放(Drag 和 Drop)功能开发——浅谈dataTransfer对象
查看>>
灰度图像亮度对比度调整的简单代码
查看>>
shell测试题上机实验
查看>>
[转]二维数组和二级指针的传递问题
查看>>
nginx+fastcgi+c/c++搭建高性能Web框架
查看>>
[转载]安装archlinux 以后没有 ifconfig,route ,nslo
查看>>
人见人爱A^B
查看>>
zoj 3795 Grouping tarjan缩点 + DGA上的最长路
查看>>
浏览器内核
查看>>
zabbix-server安装部署配置
查看>>