我正在 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
我查看了文档,在我看来一切都很好。您认为该程序为什么会这样?任何帮助,将不胜感激。
如果您查看身份验证模式的状态图:
你看到了verify()
应该在最后调用,在任何之后decrypt()
已经发生了。
因此,要么反转调用,要么用组合的调用替换它们decrypt_and_verify()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)