首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyCryptodome错误: MAC检查失败

PyCryptodome错误: MAC检查失败
EN

Stack Overflow用户
提问于 2018-02-05 05:33:20
回答 1查看 5K关注 0票数 5

我正在用Python 3编写一个加密程序,我试图加密一个(字节)字符串,然后解密它并验证MAC标记。当我验证它时,会抛出一个错误。

这是代码:

代码语言:javascript
复制
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)

这是一个错误:

代码语言:javascript
复制
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

我看过文档,我觉得一切都很好。你认为这个节目为什么会这样?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-05 07:48:54

如果您查看身份验证模式的状态图:

您可以看到,在任何verify()发生之后,应该在最后调用decrypt()。所以,要么倒转调用,要么用组合的decrypt_and_verify()替换它们。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48616390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档