Python 中的 HMAC SHA1 摘要

2024-03-05

我正在使用移动API https://dev.moves-app.com获取一些健身数据。我不想定期查询 API,而是使用故事情节通知 https://dev.moves-app.com/docs/api_notifications.

它有效,我收到来自 API 的请求,但无法验证请求中提供的 hmac sha1 签名。

文档说:

所有通知请求均使用 Base64 编码的 HMAC-SHA1 进行签名 签名。签名的计算方式为 HMAC_SHA1(,||),换句话说就是客户端 Secret 作为密钥和请求正文、时间戳和随机数连接 作为消息数据。 HTTP 标头不包含在签名中。 标头 X-Moves-Signature、X-Moves-Timestamp 和 X-Moves-Nonce 包含签名、时间戳和随机数值。时间戳是一个 unix 时间戳,自 1970 年 1 月 1 日 00:00:00 GMT 起的秒数。

我的实施:

from hmac import new as hmac_new
from hashlib import sha1

def check_signature(signature, timestamp, nonce, client_secret, request_body):
    msg = request_body + timestamp.encode('utf-8') + nonce.encode('utf-8')
    hmac = hmac_new(key=client_secret, msg=msg, digestmod=sha1)
    return hmac.digest().encode('base64') == signature

我收到来自 Flask 的请求并像这样调用我的函数:

check_signature(headers['X-Moves-Signature'], headers['X-Moves-Timestamp'], headers['X-Moves-Nonce'], settings['client-secret'], request.data)

Values:

client-secret= mnMuu6rDMkeG5FL0Fm0ho2z14JUhMVWAntUnGz0VyXc446RtqP8J7ETfag0TQa58
request-body = {"userId": 34511428141091768, "storylineUpdates": [{"reason": "DataUpload", "endTime": "20150429T121602Z", "lastSegmentType": "place", "lastSegmentStartTime": "20150429T101434Z", "startTime": "20150429T101434Z"}]}
X-Moves-Nonce = eqVCO4bnNbN+8Hhiz7ZceA== 
X-Moves-Signature = BRMwYCxglul01wbyXpfpdtiJh2Y=
X-Moves-Timestamp = 1430309780
my-digest = paWR/3yiJ8NT8KukorGVJlpmQeM=
my-hexdigest = a5a591ff7ca227c353f0aba4a2b195265a6641e3
moves_signature = BRMwYCxglul01wbyXpfpdtiJh2Y=

我也尝试过http://www.freeformatter.com/hmac-generator.html http://www.freeformatter.com/hmac-generator.html并且还收到了a5a591ff7ca227c353f0aba4a2b195265a6641e3.

(客户端密钥不再有效)。

正如您从值中看到的那样,我的摘要和 move_signature 不相等。遗憾的是,我无法获得与移动中的摘要相同的摘要,但我无法找到问题所在。有人知道如何解决这个问题吗?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 中的 HMAC SHA1 摘要 的相关文章

随机推荐

  • 字段列表中的未知列错误 Rmysql

    我使用编写了一个 data frame dbWriteTable con name db all df overwrite T row names F 使用MySQL成功连接到MySQL 现在我有第二个数据框 它具有类似的结构并尝试使用 d
  • 如何查看给定 npm 模块的依赖关系树?

    如何获取可用于 npm 但未安装在本地的模块树 npm ll执行本地安装的软件包的工作 但它不适用于未安装的模块或全局安装的模块 I tried npm list bower但事实并非如此 无需安装即可生成NPM依赖树 使用命令建立依赖关系
  • 两个 github 帐户推送到同一个存储库 [重复]

    这个问题在这里已经有答案了 所以这是一个非常具体的用例 如果任何 GitHub 专家可以帮助我 那就太好了 在我的 Linux 笔记本电脑中 我想推送same使用两个不同的 GitHub 用户名的 GitHub 存储库 我已在本地计算机中设
  • 将负数转换为无符号类型(ushort、uint 或 ulong)

    如何将一些负数转换为unsigned types Type type typeof ushort short num 100 ushort num1 unchecked ushort num When type is known Resul
  • 存储过程和实体框架的性能

    是否有任何明显的原因可以解释为什么通过实体模型调用存储过程会导致性能比直接调用慢得多 首先 我不希望 SP 运行在exactly相同的速度 我知道 EF 必须做的许多事情在直接访问 SP 时不会被调用 除此之外 我有一个返回三列字符串的查询
  • R 中的 gsub 和 regex 问题

    我在 R 中使用 gsub 将文本添加到字符串的中间 它工作得很好 但由于某种原因 当位置太长时 它会抛出错误 代码如下 gsub paste0 as integer loc 1 1 new cols sql Error in gsub p
  • C-如何使用PROGMEM存储和读取char数组

    我有三个字符数组 我不希望 Arduino 将它们存储在SRAM http en wikipedia org wiki Static random access memory 所以我想使用PROGMEM来存储和读入flash http en
  • 类似于 ftrace 打印 CPU 编号

    我想打印当前进程或函数正在执行的 CPU 编号 类似于 ftrace 如下所示 TASK PID CPU TIMESTAMP FUNCTION
  • 我无法获得可样式化的属性数组

    我使用 attrs 声明一个可样式化的视图 并以简单的方式创建了文件 myview attrs xml
  • 类库中 app.config 中的连接字符串

    我正在创建解决方案 里面有三个项目 WCF 服务库项目 数据访问项目 类库 用于托管 WCF 服务的网站 该服务的实现位于项目 1 上 但为了访问数据库 我使用了第二个项目 该项目使用类库项目实现数据访问 这个问题是为了获得数据访问 我需要
  • 将数字列表分为 2 个等和列表的算法

    有一个数字列表 该列表将被分为 2 个大小相等的列表 并且总和相差最小 金额必须打印出来 Example gt gt gt que 2 3 10 5 8 9 7 3 5 2 gt gt gt make teams que 27 27 对于某
  • Actionscript3 到 JavaScript 通信:最佳实践

    那么在更抽象的层面上上一个问题 https stackoverflow com questions 299729 javascript to flash communication 根据我的经验 有 3 种方法可以使用 AS3 从嵌入式 s
  • 通过 less 生成 CSS 组

    是否能够创建这样一个生成CSS组的mixin 我将在下面解释我的意思 fancymixin max prefix content what I don t know how to code fancymixin 10 x 它会生成类似以下内
  • MySQL:SELECT 语句区分大小写吗?

    是MySQLSELECT查询默认区分大小写还是不区分大小写 如果没有 我必须发送什么查询才能执行如下操作 SELECT FROM table WHERE Value iaresavage 事实上 真正的价值Value is IAreSava
  • 使用对象浏览器中未列出的对象属性

    我一直在深入研究 VBA 中对象属性和方法的底层结构 我刚刚读到每个对象的所有属性和方法都列在开发人员框中的 对象浏览器 中 之所以提示我查看此内容 是因为我使用了对象浏览器中未列出的方法 我用了 Sheets Front face Sha
  • clojure core.async 通道如何清理?

    我是第一次了解 Clojure core async 并且正在阅读 Rich Hickey 的精彩演示 http www infoq com presentations clojure core async http www infoq c
  • pyspark 是否会更改优化指令的顺序?

    假设我有以下管道 df orderBy foo limit 10 show 在这里我们可以看到orderBy指令首先出现 因此数据帧的所有行都应在指令之前排序limit指令被执行 我发现自己在想 Spark 是否在管道内进行一些 重组 以提
  • 从 ASP Classic 迁移到 .NET 并缓解痛苦

    我们正在 NET 3 5 中重新设计网站面向客户的部分 到目前为止一切进展顺利 我们使用相同的工作流程和存储过程 在大多数情况下 最大的变化是 UI ORM 从字典到 LINQ 当然还有语言 到目前为止 大多数页面都是微不足道的 但现在我们
  • AlertDialog 样式 - 如何更改标题、消息等的样式(颜色)

    我已经为这件事伤透了脑筋 我需要做的是 改变所有的风格AlertDialog在我的 Android 应用程序中 对话框背景需要是白色的 文本需要是黑色的 我尝试创建很多样式 主题 并从代码 清单等中应用 但就文本颜色而言没有成功AlertD
  • Python 中的 HMAC SHA1 摘要

    我正在使用移动API https dev moves app com获取一些健身数据 我不想定期查询 API 而是使用故事情节通知 https dev moves app com docs api notifications 它有效 我收到