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。
我很难理解这里出了什么问题,有没有人知道破译此错误消息的含义以及可能如何解决问题?
'''
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。