Pycryptodome无法解密数据

时间:2017-11-18 13:10:42

标签: python pycryptodome

为什么cipher3无法解密密码数据?

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

代码:

>>> 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'

1 个答案:

答案 0 :(得分:1)

问题是您用于解密的密码对象(在您的情况下为cipher2cipher3)必须以与生成相同的顺序显示密文 (在你的情况下由cipher)。

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

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

另请注意,EAX是一种经过身份验证的密码模式:您应该使用方法decrypt_and_verify(),除非您有充分的理由不这样做。