Python Pycryptodome can';t解密数据

Python Pycryptodome can';t解密数据,python,pycryptodome,Python,Pycryptodome,为什么cipher3不能解密密码数据 cipher2和cipher3使用相同的nonce,但cipher3无法解密数据 代码: 问题是,用于解密的密码对象(cipher2,cipher3,在您的情况下)必须按照生成的顺序呈现密文片段(在您的情况下由cipher) 相反,您将data2作为第一个密文传递给cipher3,即使它是第二个生成的 这适用于其他几种密码模式,而不仅仅是EAX 还请注意,EAX是一种认证密码模式:除非有充分理由不使用,否则应使用方法decrypt_and_verify(

为什么cipher3不能解密密码数据

  • cipher2和cipher3使用相同的nonce,但cipher3无法解密数据
代码:


问题是,用于解密的密码对象(
cipher2
cipher3
,在您的情况下)必须按照生成的顺序呈现密文片段(在您的情况下由
cipher

相反,您将
data2
作为第一个密文传递给
cipher3
,即使它是第二个生成的

这适用于其他几种密码模式,而不仅仅是EAX

还请注意,EAX是一种认证密码模式:除非有充分理由不使用,否则应使用方法
decrypt_and_verify()

>>> from Crypto.Cipher import AES

>>> cipher = AES.new(b"M"*16, AES.MODE_EAX)
>>> cipher2 = AES.new(b"M"*16, AES.MODE_EAX, cipher.nonce)
>>> cipher3 = AES.new(b"M"*16, AES.MODE_EAX, cipher.nonce)

>>> data = cipher.encrypt(b"Hello")
>>> data2 = cipher.encrypt(b"World")

>>> cipher2.decrypt(data)
b'Hello'
>>> cipher3.decrypt(data2)
b'S\xa5\x92\xa2\x9a'
>>> cipher2.decrypt(data2)
b'World'