Python 简单 DES encrypt/decrypt 程序 "ValueError MAC check failed" 问题

Python Simple DES encrypt/decrypt program "ValueError MAC check failed" issue

我很难理解这里出了什么问题,有没有人知道破译此错误消息的含义以及可能如何解决问题?

'''

from Crypto.Cipher import DES

def DESenc():
    key = b'password'
    message = b'i like beans'
    cipher = DES.new(key, DES.MODE_EAX)
    ciphertext, tag = cipher.encrypt_and_digest(message)

    file_out = open("encrypted.bin", "wb")
    [ file_out.write(x) for x in (cipher.nonce, tag, ciphertext) ]
    file_out.close()

def DESdec():
    file_in = open("encrypted.bin", "rb")
    nonce, tag, ciphertext = [ file_in.read(x) for x in (16, 16, -1) ]
    key = b'password'

    cipher = DES.new(key, DES.MODE_EAX, nonce=nonce)
    data = cipher.decrypt_and_verify(ciphertext, tag)

    print(data.decode('ascii'))

DESenc()
DESdec()

'''

根据文档,标签大小默认对应于算法的块大小 (here),DES 为 8 字节(而不是 AES 等 16 字节)。 因此,在解密过程中

nonce, tag, ciphertext = [ file_in.read(x) for x in (16, 8, -1) ]

必须申请。然后解密就可以了。

或者,可以显式设置标签大小(但对于使用的参数,DES/EAX,8 个字节是最大标签大小)。

请注意,DES 已被弃用且不安全。今天的标准是 AES。