python 中的 Crypto-js 等效函数

问题描述 投票:0回答:1

我有一个 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()
的等价物。但是两者都返回不同的响应。

javascript python-3.x cryptography cryptojs python-cryptography
1个回答
1
投票

要在 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 实现返回的结果不同,因为不同的库可能对某些参数(例如填充和块模式)使用不同的默认值。

© www.soinside.com 2019 - 2024. All rights reserved.