PyCryptodome 错误:MAC 检查失败

2024-04-07

我正在 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(使用前将#替换为@)

PyCryptodome 错误:MAC 检查失败 的相关文章

随机推荐

  • 列出 Notion 上集成访问的所有数据库

    有没有更有效的方法来获取所有数据库的列表 我尝试过使用https api notion com v1 databases端点 但现在已弃用 另一种选择是 search端点 但它也返回数据库中的所有记录 有人可以提供更好的方法来列出集成访问的
  • 无法读取 R 中的 shapefile

    我尝试使用以下代码在 Mac 上打开 shp 文件 library tidyverse library sf library rgeos sf trees raw lt readr read csv https raw githubuser
  • 使用 RSelenium 读取下拉菜单元素中的值

    我正在使用 RSelenium 导航到站点并与元素交互 问题 使用 RSelenium 如何读取下拉菜单中的选项列表 以便我可以识别可用的最新月份并使用它将下拉菜单设置为正确的值 On 某个网站 http jamaserv jama or
  • 使用 angularjs 在本地驱动器中上传文件

    我是 angularjs 的初学者 我读了很多关于文件上传等的内容 但找不到我将进一步描述的此案例的任何主题 我想在下面的代码中通过按钮 带有搜索名称 来选择一个文件 然后 当我们单击第二个按钮 带有上传名称 时 我选择在我制作的本地驱动器
  • 根据选择的选项更新输入值

    我正在尝试找出更新某些内容的最佳方法input值取决于从中选择的选项select 这是我想要实现的目标 我有一个显示域名详细信息的页面 我有一个表格input and select这允许更改价格 这input包含当前域名价格并允许用户输入新
  • Python 中的就地快速排序

    我必须用我选择的语言来实现作业的快速排序算法 所以我选择了 Python 在讲座中 我们被告知 QuickSort 内存效率高 因为它就地工作 即 它没有用于递归的输入数组部分的额外副本 考虑到这一点 我尝试在 Python 中实现 Qui
  • 使用 jquery 获取元素的可见高度而不是其实际高度

    这篇文章是相关的this one https stackoverflow com questions 14125303 change target of a link based on what is currently displayed
  • 无法在新 Mac 上打开 Xcode 项目

    我想我在这里犯了一个错误 几个月前我设计了一个应用程序 甚至在应用程序商店中找到了它 从那时起我就买了一台新的Mac 我将 Xcode 项目文件复制到我的新 Mac 上 我几个月来第一次回来看它 但什么也没有打开 我有时会收到无法解析的警告
  • 使用 JavaScript 更改 IE 中的 类型

    下面的代码适用于除 IE 之外的所有网络浏览器
  • 解决 Kotlin MPP 中的第三方 cocoapod 依赖关系

    我正在尝试设置一个用 Kotlin Multiplatform 编写的跟踪库来支持我们所有的移动客户端 Android 测试进展顺利 通过 gradle 集成 Snowplow 我还设法通过 cocoapods 将 Snowplow 集成到
  • java 负向前瞻

    我需要一个表达式来捕获这样的字符串 A 不是至少 5 且最多 6 位数字的字符串 B 换句话说 捕获不是以下内容的任何内容 A 0 9 0 9 0 9 0 9 0 9 B A 0 9 0 9 0 9 0 9 0 9 0 9 B 我尝试过消极
  • 如何检查libc++是否安装?

    我正在从源头构建一些东西 我的系统的 gcc 和 stdlibc 太旧了 但是我可以使用 clang 构建 默认情况下 clang 使用 stdlibc 但可以选择安装 libc 以供 clang 使用 检查 libc 是否与 clang
  • 调用未定义的函数 apache_request_headers()

    我刚刚将脚本切换到不同的服务器 在以前的服务器上 这工作得很好 现在我已经将它们切换到不同的服务器 我无法理解这个问题 我不确定这会有帮助 但这是相关的代码 headers apache request headers PHP版本是 PHP
  • 如何将SQL用户自定义函数添加到实体框架中?

    我可以像在 dbml 中那样向 edmx 文件添加 SQL 函数吗 如果可以的话 我该怎么做 如果我不能 有什么解决方法吗 我尝试谷歌 但找不到任何关于如何做到这一点的具体答案 根据给定的答案 我创建了一个存储过程并尝试添加 导入函数 但它
  • java 7 接口中默认方法的替代方案(仅在 Java 8 中)

    我想在我的一个接口类中使用默认方法 然后我意识到这仅在 Java 8 中可用 而我们正在使用 Java 7 在 Java 7 中实现类似的最佳方法是什么 将方法签名放在接口中 就像 Java 8 中一样 将您的方法默认实现放在实现该接口的抽
  • 无法通过代理建立隧道。代理通过 https 返回“HTTP/1.1 407”

    我尝试通过需要身份验证的 https 连接到服务器 此外 我中间有一个也需要身份验证的 http 代理 我使用 ProxyAuthSecurityHandler 向代理进行身份验证 使用 BasicAuthSecurityHandler 向
  • Rails 资源未更新

    我有一个 Rails 3 1 应用程序 由于某种原因 当我更改 CSS 时 更改不会显示 我做到了bundle exec rake assets precompile它曾经有帮助 但现在无论如何我都坚持使用旧的CSS 由于您的资产现已预编译
  • 如何使用 Window() 计算 PySpark 中的滚动中位数?

    如何计算前 3 个值的窗口大小的美元滚动中位数 输入数据 dollars timestampGMT 25 2017 03 18 11 27 18 17 2017 03 18 11 27 19 13 2017 03 18 11 27 20 2
  • “rails server”命令在终端中不起作用

    我对 Rails 还很陌生 正在尝试设置一个非常简单的测试站点 我使用以下命令创建了新的 Rails 应用程序目录rails new命令 但无法设置服务器以在浏览器中查看页面 以下是我尝试时收到的消息rails server MacBook
  • PyCryptodome 错误:MAC 检查失败

    我正在 Python 3 中使用 Pycryptodome 开发一个加密程序 我试图加密一个 字节 字符串 然后解密它并验证 MAC 标签 当我验证它时 会抛出错误 这是代码 from Crypto Cipher import AES fr