AES解密失败,什么情况

使用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)

img

该回答引用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进制字符串。