2017-11-18 37 views
1

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

  • cipher2和cipher3使用相同的随机数,但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

的问题是,您在使用解密(cipher2cipher3密码对象你的情况)必须按照他们生产的相同顺序(在你的情况下通过cipher)呈现密文片段

取而代之的是,您将data2作为第一张密文传递给cipher3,即使它是第二张密文。

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

注意,EAX是认证加密模式:除非你有很好的理由不应该使用方法decrypt_and_verify()

+0

哦,非常感谢您的帮助。 – Tspm1eca