企业微信加密消息体_加解密方案说明

[TOC]

概述

企业微信在推送消息给企业时,会对消息内容做AES加密,以XML格式POST到企业应用的URL上。

企业在被动响应时,也需要对数据加密,以XML格式返回给企业微信。

本章节即是对加解密方法的说明。

阅读本章节前,需要了解以下术语:

msg_signature: 消息签名,用于验证请求是否来自企业微信(防止攻击者伪造)。

EncodingAESKey:用于消息体的加密,长度固定为43个字符,从a-z, A-Z, 0-9共62个字符中选取,是AESKey的Base64编码。解码后即为32字节长的AESKey

AESKey=Base64_Decode(EncodingAESKey + “=”)

AESKey:AES算法的密钥,长度为32字节。

AES采用CBC模式,数据采用PKCS#7填充至32字节的倍数;IV初始向量大小为16字节,取AESKey前16字节,详见:http://tools.ietf.org/html/rfc2315

msg:为消息体明文,格式为XML

msg_encrypt:明文消息msg加密处理后的Base64编码。

使用已有库

鉴于加解密算法相对复杂,企业微信提供了算法库。

目前已有c++/python/php/java/golang/c#等语言版本。均提供了解密、加密、验证URL三个接口,企业可根据自身需要下载,下载地址。

使用现有库,用户不必细究加解密原理。对于找不到相应语言库的用户,请阅读后文原理详解自行实现。欢迎大家分享~

以c++为例,使用示例见下载的文件夹中的Sample.cpp, 此处做简单说明。

初始化加解密类WXBizMsgCrypt wxcpt(sToken,sEncodingAESKey,sReceiveId);

要求传参数sToken,sEncodingAESKey,sReceiveId。

sToken,sEncodingAESKey即设置接收消息的参数章节所述配置的Token、EncodingAESKey。

特别注意, sReceiveId 在不同场景下有不同含义,见附注。

验证URL函数

本函数实现:

签名校验

解密数据包,得到明文消息内容

int VerifyURL(const string &sMsgSignature, const string &sTimeStamp, const string &sNonce, const string &sEchoStr, string &sReplyEchoStr);参数说明

参数

必须

说明

sMsgSignature

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值