2017-11-18 97 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