蜘蛛侠001 2023-03-08 11:49 采纳率: 95%
浏览 147
已结题

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

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-03-08 12:07
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月8日