企业微信解密算法Python简洁化示例,可直接使用进行解密echostr,完成设置接收事件服务器的url配置
注:该文仅对echostr
进行解密,可满足配置设置服务器url的需要,其余等后续需要会补充,或留言后我找时间再提炼简化其他解密算法
起因
企微提供的算法要么调整了没有同步修改提供的代码示例,要么就是过于解耦可读性较差。本文针对最需要的部分提出了最精简的代码。
精简代码
解决echostr解密返回明文,完成回调事件url的配置问题。
Crypto依赖包:pip install pycryptodome
import base64
import socket
import struct
from urllib import parse
from xml.dom import minidom
from Crypto.Cipher import AES
def aes_decrypt(secret_key, en_text):
aes = AES.new(secret_key, AES.MODE_CBC, secret_key[:16])
de_text = aes.decrypt(en_text)
return de_text
def de_echostr(echostr):
EncodingAESKey = '填写你自己的EncodingAESKey'
AESKey = base64.b64decode(EncodingAESKey + '=')
aes_msg = base64.b64decode(echostr)
rand_msg = aes_decrypt(AESKey, aes_msg)
content = rand_msg[16:] # 去掉前16随机字节
# 取出4字节的msg_len
xml_len = socket.ntohl(struct.unpack("I", content[:4])[0])
xml_content = content[4: xml_len + 4]
print('xml_content', xml_content)
return xml_content
# 读取xml数据函数
def get_xml_data(xml_text, node_name):
dom = minidom.parseString(xml_text)
root = dom.documentElement
node_eles = root.getElementsByTagName(node_name)
node_data = node_eles[0].firstChild.data
return node_data
if __name__ == '__main__':
echostr = '' # get请求过来的echostr参数值
echostr = parse.unquote(echostr)
ret = de_echostr(echostr)
print('解密后的echostr', ret)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?