微信消息

基于Nodejs的微信消息加密与解密实现概要

老子叫甜甜 提交于 2019-12-06 21:21:22
微信团队提供了 多种语言的示例代码 ,但不包含Nodejs实现版本。经过大量查证和尝试,我已完成并测试通过,下面说说实现要点。 准备 Nodejs为 0.12.1 版或 0.12.2 版,当前最新稳定版。 平台支持Windows和Linux。 基于Python版本改写,通过Python的加解密验证及实际部署验证。 关键点 密匙 key 应当通过 Buffer 转换为binary字符串。 通过 String.fromCharCode 获得补位所用的字符,通过 charCodeAt 判断需要删除的补位字符长度。 设置明文长度时,应通过 Buf.writeUInt32BE 写入,并转换为binary字符串;读取时,使用 Buf.readUInt32BE 。 加密时,XML原文需通过 Buffer 转换为binary字符串。 加密使用 crypto.createCipheriv ,解密使用 crypto.Decipheriv ;须设置 cipher.setAutoPadding(auto_padding=false) ,否则不能正确加解密。 加密时,输入编码为 binary ,输出编码为 base64 。 解密时,输入编码为 base64 ,输出编码为 utf8 。 每个中文字符通过Buffer转换后,实际计算长度为3,因此最后分离 from_appid 时,需便宜行事:P 密匙 key