如何将基于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
相关产品推荐
相关产品推荐

