我有一个 javascript 函数,它使用来自 Crypto-Js 模块的 AES 密码加密 json。我想要在 python 中等效于此函数。 `encryptAES = 函数(数据 1){ var keyUtf8 = CryptoJS.enc.Base64.parse('1234567890='); var ivUtf8 = CryptoJS.enc.Base64.parse('1234==');
var encrypted = CryptoJS.AES.encrypt(JSON.stringify(data1), keyUtf8, {
iv: ivUtf8,
padding: CryptoJS.pad.Pkcs7,
mode: CryptoJS.mode.CBC}).toString();
console.log('encrypted===aes=='+encrypted);
return encrypted
}`
我试着在 python 中找到等效函数。对于初学者,我尝试使用 base64 python 模块找到
CryptoJS.enc.Base64.parse()
的等价物。但是两者都返回不同的响应。
要在 Python 中复制 JavaScript 函数的功能,您需要使用 PyCryptodome 库来执行 AES 加密。
这里是等效的 Python 函数:
from Crypto.Cipher import AES
import base64
import json
def encryptAES(data1):
key = base64.b64decode('1234567890=')
iv = base64.b64decode('1234==')
cipher = AES.new(key, AES.MODE_CBC, iv)
padded_data = _pad_data(json.dumps(data1).encode('utf-8'))
encrypted = cipher.encrypt(padded_data)
return base64.b64encode(encrypted).decode('utf-8')
def _pad_data(data):
padding_length = AES.block_size - len(data) % AES.block_size
padding = chr(padding_length) * padding_length
return data + padding.encode('utf-8')
_pad_data函数用PKCS7 padding填充数据,保证是加密前块大小的倍数。 encryptAES 函数接受一个 JSON 对象,将其转换为 JSON 字符串,并使用具有 CBC 模式和 PKCS7 填充的 AES 对其进行加密。
请注意,编码结果可能与 JavaScript 实现返回的结果不同,因为不同的库可能对某些参数(例如填充和块模式)使用不同的默认值。