PyCryptodome错误:MAC检查失败

时间:2018-02-05 05:33:21

标签: python encryption cryptography pycrypto pycryptodome

我正在使用Python 3中的Pycryptodome加密程序。我正在尝试加密(字节)字符串,然后解密它并验证MAC标记。当我验证它时,会抛出错误。

这是代码:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

aes_key = get_random_bytes(24)
aes_cipher = AES.new(aes_key, AES.MODE_GCM)
encrypted, MACtag = aes_cipher.encrypt_and_digest(b"A random thirty two byte string.")

# Imagine this is happening somewhere else
new_aes_cipher = AES.new(aes_key, AES.MODE_GCM, nonce=aes_cipher.nonce)
new_aes_cipher.verify(MACtag)
decrypted = new_aes_cipher.decrypt(encrypted)

这就是错误:

Traceback (most recent call last):
  File "aespractice.py", line 10, in <module>
    new_aes_cipher.verify(tag)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-
packages/Crypto/Cipher/_mode_gcm.py", line 441, in verify
    raise ValueError("MAC check failed")
ValueError: MAC check failed

我看了一下文档,我觉得一切都很好。为什么你认为该计划是这样的?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

如果查看已验证模式的状态图:

enter image description here

您发现在verify()发生之后,应该在最后调用decrypt()。 因此,您可以反转调用,也可以使用合并的decrypt_and_verify()替换它们。