求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
相关产品推荐
相关产品推荐

