微信企业号加密机制

AES加密算法是目前主流的一种加密算法,先通过一张图片来说明一下原理:
这里写图片描述
可以看到这个加密的外层原理比较简单。(底层还是比较复杂的),可以看到秘钥只有发送方和接收方知道。在不知道秘钥的情况下,任何人都不能解密,所以使用aes加密是一种非常好的数据传输方式。那么问题来了接收方如何知道秘钥。
之前了解过微信企业号是使用aes加密算法进行数据传输的,那么也必然涉及到秘钥传输问题。接下来用微信企业号是如何进行数据安全转发的来说明一下aes加密算法的使用。简单说一下微信企业号,如下图:
这里写图片描述
我们讨论的是微信企业号和企业应用之间的数据传输,而不是微信用户和微信企业号之前的传输。不得不说腾讯在这一方面还是比较慎重的,在新版本的企业号中不仅要求配置的企业号链接要是https的,而且数据还使用了aes进行加密。
在实现企业号和企业应用实现消息互发之前,企业号会要求我们填写相应的URL,Token,EncodingAESKey三个参数。URL很好理解就是接收方的地址。EncodingAESKey用于消息的加密,就是秘钥。Token任意填写,用于生成签名。如下:
这里写图片描述
这里有一个问题,既然已经有EncodingAESKey用于消息体的加密,为什么还需要token。这是因为它可以让公众账号服务器确认请求是来自微信后台还是恶意的第三方。
验证原理:
微信后台在向公众账号服务器发送数据的时候,会额外带上4个参数:timestamp、signature、nonce、echostr。其中timestamp是时间戳,nonce是一个随机数,signature是对timestamp、nonce和Token进行SHA1加密后的字符串。SHA1的加密过程是不可逆的,即不能通过timestamp、signature和nonce计算出Token是什么。在服务器端收到这4个字符串,先利用本地的token和imestamp、nonce进行SHA1加密,加密之后得到的结果与signature进行比较,如果正确就说明发送方不是恶意的第三方。所以这个token仅仅是用于验证数据来源是否是善意的。(这里简单说一下SHA1和md5的异同点,首先它们都是不可逆的散列算法,然后SHA1的强度更好,也就是更难暴力破解)
当确定消息来源合法之后,消息得以正常传输。AES秘钥就用在消息体的加密上,所以AES秘钥也是企业应用和微信企业号共同知道的。而在我们的应用端,向企业号发送信息时,也是需要进行aes加密的,不然在企业号一端不会按照我们的要求将信息转发给微信用户。这里我们直接使用开源的aes加密解密的java架包即可。到此为止微信企业号消息转发的问题就解决了,其实微信企业号比较有趣的是如何实现带权限的访问企业应用。这里都是一些很好的设计思想,暂时到这,下次再写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值