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

如何将基于CryptoJS的JavaScript AES加密代码转换为Python等效实现

问题原因梳理
  • 核心逻辑错误:你混淆了base64编解码的使用场景。cryptoJs.enc.Base64.parse(str)的作用是将base64编码的字符串解码为原始二进制字节,而你代码中使用base64.b64encode做编码操作,导致生成的key、iv长度完全不符合AES要求,触发IV长度错误。
  • 输出格式不匹配:JS代码最终输出的是base64格式的密文,你代码中使用binascii.hexlify输出十六进制内容,和预期结果不符。
正确实现代码

首先安装依赖库:
pip install pycryptodome

完整可运行代码:

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

# 参数和原JS代码完全对应
key_b64 = "QWJjZGVmZ2hpamtsbW5vcA=="
iv_b64 = "AAAAAAAAAAAAAAAAAAAAAA=="
plaintext = "secrettext"

# 对应CryptoJS的enc.Base64.parse逻辑,解码得到原始二进制key、iv
key = base64.b64decode(key_b64)
iv = base64.b64decode(iv_b64)

# 明文做PKCS7填充,AES块大小固定为16字节
padded_text = pad(plaintext.encode('utf-8'), 16, style='pkcs7')

# CBC模式加密
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(padded_text)

# 对应JS的toString(cryptoJs.enc.Base64)逻辑,输出base64格式密文
result = base64.b64encode(ciphertext).decode('utf-8')
print(result)

上述代码输出结果和你提供的JS代码运行结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:04