使用AES解密时,报错了
# AES加密
from Crypto.Cipher import AES
import binascii
from Crypto.Util.Padding import pad
key = "4E2918885FD98109869D14E0231A0BF4"
key = binascii.a2b_hex(key)
iv = "16B17E519DDD0CE5B79D7A63A4DD801C"
iv = binascii.a2b_hex(iv)
def aes_encrypt(data_string):
aes = AES.new(key=key, iv=iv, mode=AES.MODE_CBC)
raw = pad(data_string.encode('utf-8'), 16)
aes_bytes = aes.encrypt(raw)
return binascii.a2b_hex(aes_bytes).decode().upper()
data = "|-1328052876|o000080om7e|1678241868|mg3c3b04ba|1.25.0|lexu3nve_bm8di0kw5t|4330701|https://m.yangshipin.cn/|mozilla/5.0 (linux; andr||Mozilla|Netscape|Win32|"
rrr = aes_encrypt(data)
print(rrr)
该回答引用GPTᴼᴾᴱᴺᴬᴵ
您好,这个报错可能是因为您的密钥长度不正确,AES密钥长度要求为16、24或32个字节,而您的密钥长度为32个16进制字符,需要将其转换为16个字节的二进制数据。
您可以使用binascii.unhexlify()函数将密钥和iv从16进制字符串转换为二进制数据,修改后的代码如下所示:
from Crypto.Cipher import AES
import binascii
from Crypto.Util.Padding import pad
key = "4E2918885FD98109869D14E0231A0BF4"
key = binascii.unhexlify(key)
iv = "16B17E519DDD0CE5B79D7A63A4DD801C"
iv = binascii.unhexlify(iv)
def aes_encrypt(data_string):
aes = AES.new(key=key, iv=iv, mode=AES.MODE_CBC)
raw = pad(data_string.encode('utf-8'), 16)
aes_bytes = aes.encrypt(raw)
return binascii.hexlify(aes_bytes).decode().upper()
data = "|-1328052876|o000080om7e|1678241868|mg3c3b04ba|1.25.0|lexu3nve_bm8di0kw5t|4330701|https://m.yangshipin.cn/|mozilla/5.0 (linux; andr||Mozilla|Netscape|Win32|"
rrr = aes_encrypt(data)
print(rrr)
另外,由于加密后的结果是二进制数据,您需要使用binascii.hexlify()将其转换为16进制字符串。