You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Crypto-JS AES加密函数的Python等效实现

Python 等效实现 AES 加密函数

以下是对应你提供的 Crypto-JS 代码的 Python 实现,使用 pycryptodome 库完成加密逻辑:

前置依赖

首先安装所需库:

pip install pycryptodome

完整加密函数

import json
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad

def encrypt_aes(data1):
    # 解析 Base64 格式的密钥和 IV,对应 CryptoJS.enc.Base64.parse
    key = base64.b64decode('1234567890=')
    iv = base64.b64decode('1234==')
    
    # 序列化 JSON 数据,确保和 JS 的 JSON.stringify 输出一致(无多余空格)
    json_str = json.dumps(data1, separators=(',', ':'))
    data_bytes = json_str.encode('utf-8')
    
    # AES-CBC 加密,使用 PKCS7 填充(和 CryptoJS 配置一致)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    padded_data = pad(data_bytes, AES.block_size, style='pkcs7')
    encrypted_bytes = cipher.encrypt(padded_data)
    
    # 将密文转为 Base64 字符串,对应 CryptoJS 加密结果的 toString()
    encrypted = base64.b64encode(encrypted_bytes).decode('utf-8')
    
    print(f'encrypted===aes=={encrypted}')
    return encrypted

关键细节说明

  • Base64 解析一致性:CryptoJS 的 CryptoJS.enc.Base64.parse() 本质是将 Base64 字符串解码为字节数组,Python 的 base64.b64decode() 完全等效。如果之前结果不一致,大概率是因为 JSON 序列化格式差异,而非 Base64 解析问题。
  • JSON 序列化对齐:JS 的 JSON.stringify() 默认生成无空格的紧凑格式,Python 需通过 separators=(',', ':') 参数确保输出一致,否则明文差异会导致加密结果完全不同。
  • 填充与模式匹配:明确指定 PKCS7 填充和 CBC 模式,和 CryptoJS 代码中的配置严格对应。

内容的提问来源于stack exchange,提问作者Aditya Gaurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 02:49:56