#we-chat #signature #sdk #encryption #crypto #plain-text

wechat-crypto

微信开发者API数据加解密工具 Wechat / Wecom 加密 / 解密

3个版本

0.1.2 2023年5月12日
0.1.1 2023年5月12日
0.1.0 2023年5月11日

#8 in #wechat

每月35次下载

MIT许可证

18KB
224

docs.rs

微信 / 企业微信加密工具

微信接口数据加密解密工具。

常规用法无法正确加解密,因为微信的加密算法存在问题,这里提供了一个可以正确加解密的工具。

功能

  • 企业微信回调接口签名验证和解密
  • 企业微信回调接口响应加密
  • 企业微信通讯录导出数据解密

lib.rs:

解决企业微信数据解码解密时遇到的异常问题,以便正常解析内容

适用场景

  • 企业微信回调接口签名验证和解密
  • 企业微信通讯录导出数据解密

示例

use base64::Engine;
use base64::engine::general_purpose::STANDARD;
use wechat_crypto::{calc_signature, decode_aes_key, decrypt, parse_plain_text};

let encoded_aes_key = "kWxPEV2UEDyxWpmPdKC3F4dgPDmOvfKX1HGnEUDS1aQ";
// 解码 aes_key
let aes_key = decode_aes_key(encoded_aes_key).unwrap();

// 解密数据收到的数据
let r = decrypt(
    &aes_key,
    &STANDARD
        .decode("9s4gMv99m88kKTh/H8IdkNiFGeG9pd7vNWl50fGRWXY=")
        .unwrap(),
)
.unwrap();
dbg!(String::from_utf8_lossy(&r).to_string());

// 提取数据中的正文和 receiver_id
let (t, r) = parse_plain_text(&r).unwrap();
assert_eq!("test", &t);

// 签名验证
let token = "QDG6eK";
let verify_msg_sign = "5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3";
let verify_timestamp = "1409659589";
let verify_nonce = "263014780";
let verify_echo_str = "P9nAzCzyDtyTWESHep1vC5X9xho/qYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp+4RPcs8TgAE7OaBO+FZXvnaqQ==";

// 验证签名是否匹配
assert_eq!(
    verify_msg_sign,
    calc_signature(token, verify_timestamp, verify_nonce, verify_echo_str)
);

依赖项

~1.8–2.6MB
~54K SLoC