为什么我无法计算正确的 HMAC 签名?

2024-04-25

我正在尝试在 Google Apps 脚本中计算 HMAC 签名,但文档并未 100% 清楚地说明我需要如何传递参数,并且我无法获得预期的输出。


为了确定我是否获得正确的输出,我将结果与已知良好的 PHP 代码进行比较。该代码是:

$key = "a2V5"; # this is "key" base64-encoded
$value = "test";
$result = base64_encode(hash_hmac('sha512', $value, base64_decode($key), true));

我在 Google Apps 脚本中的代码是:

key = "a2V5"; // this is "key" base64-encoded
value = "test";
result = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, value, Utilities.base64Decode(key)));

我期望收到的输出是:

KHoPuJp/vfpbVThjaRjlN6W4MGXk/zMSaLeqoRXd4EepsPT7W4KGCPwLYyfxAFX3Y3sFjp4Nu55piQGj5t1GHA==

但我得到的是:

mGXJ3X/nH5ZIFUAPtf1PsViY50pD3cfU7J8w2KAIEAqrAgZ3dpKcuy5V1yvH4/C5n1C9rFFsKc2JKHTwUqPscQ==

我在这里搞砸了什么?


我查看了您的代码,有一件事引起了我的注意:

Utilities.base64Decode(key)方法返回Byte[] Utilities.computeHmacSignature(macAlgorithm, value, key)接受 3 个参数。value and key属于类型string.

也许这就是问题所在。为什么不尝试以下方法并检查结果:

key = "a2V5"; // this is "key" base64-encoded
clearKey = "key";
value = "test";
result = Utilities.base64Encode(Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, value, clearKey));

我检查 Google Apps 脚本here https://developers.google.com/apps-script/class_utilities?hl=en.

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

为什么我无法计算正确的 HMAC 签名? 的相关文章

  • Google Apps 脚本:从云端硬盘下载文件(同一用户)

    我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件 可能是 csv 文件 我找到了 getDownloadUrl 方法 但我不知道该做什么do用它 我目前正在尝试以下代码 其中files是文件夹中的文件列表
  • 如何使用 Google Apps 脚本编辑现有的 Google 表单项(问题)

    我有一个谷歌脚本来构建谷歌表单 该脚本使用包含问题和相应选项的电子表格填写表单 表格中显示的问题需要定期更新 我希望通过更改电子表格中的问题来更新表单中的问题 如下所示 I use onOpen 对于脚本 以便每次访问表单时 脚本都会重建最
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 谷歌表格根据今天的日期隐藏行

    在 Google Sheets 中 当 A 列中的日期等于或早于今天的日期时 我需要一个脚本来自动隐藏工作表 1 中的行 因此 如果今天是 2018 年 8 月 29 日 单元格 A3 中的日期是 2018 年 8 月 28 日 则第 3
  • Drive.Permissions.insert(值)-Drive API,您可以在“值”下使用数组吗?

    是否可以在此处使用 值 下的数组来阻止我创建组别名电子邮件地址 例如 userValues email protected cdn cgi l email protection email protected cdn cgi l email
  • 通过 Apps 脚本强制刷新公式

    有时 更改单元格的值时 电子表格中的公式不会自动刷新 并且单元格上会出现注释以选择该单元格 然后按 CTRL SHIFT E 强制重新加载公式 我想从 Apps 脚本调用此重新加载函数 有没有办法用 Apps 脚本来做到这一点 我尝试了 S
  • 使用 Promise 对 Google 表格进行多次查询

    我是一名初学者编码器 需要一些帮助来加快我的 Google 表格查询速度 我环顾四周 找不到解决方案 我正在尝试快速对 Google 表格运行 25 个查询 这就是我的尝试方式 对 Google 工作表运行查询 将结果推送到数组 运行不同的
  • 如何像函数一样使用 google.script.run

    在 Google Apps 脚本中 我有以下脚本 function doGet return HtmlService createHtmlOutputFromFile mypage function writeSomething retur
  • 如何在Google工作表中添加类似于Excel中的表单控件滚动条的水平滚动条?

    我想添加一个水平滚动条 它将根据其位置提供 0 365 的值 并使用该值进行计算 我正在创建一个甘特图 与页面上的相同https www vertex42 com ExcelTemplates excel gantt chart html
  • 自动递增 ID 号 Google Apps 脚本

    我想在向工作表添加新值时自动增加 ID 我尝试从当前的 ID 列表创建一个列表 但它只计数到 5 因此当自动递增时 它只会到达一个点并为每个输入保存该数字 以下是我尝试获取 ID 号列表的方法 但它没有获取整个列表 我缺少什么 var ss
  • HTML 格式的 Google Apps 脚本

    是否可以在我的 HTML 中使用 google apps 脚本 我希望能够从外部框架 例如 Node js 以纯 Javascript 形式从表单写入电子表格 https developers google com apps script
  • ArrayFormula 破坏了 getLastRow() 函数。可能的解决方法?

    在我的电子表格中 我有一个正在运行的脚本 它使用getLastRow 功能是其逻辑的重要组成部分 自从我在其中一列中应用数组公式以来 getLastRow 功能无法正常工作 即使其他列中没有其他值 数组公式似乎也一直 应用 到工作表的底部
  • 用于设置形状颜色的 Google Apps 脚本

    我正在查看 Google Apps 脚本参考here https developers google com apps script reference slides fill setSolidFill Color 并注意到有一种方法set
  • 有没有办法导入/导出容器绑定脚本

    我有一个插件 它使用 appscripts gs 以及 html js 和 css 文件 目前我们所做的是我们有一个参考 Google 文档 其中有一个脚本项目包含所有这些源代码 但是除了手动复制和粘贴之外 没有办法在 GIT 中保留源代码
  • 您可以在不是在 Google 协作平台下创建的网站上使用 Google 脚本吗? [复制]

    这个问题在这里已经有答案了 Google 脚本有一种方法可以嵌入到 Google 网站中 但我想知道是否可以在非 Google 托管的网站上使用 Google 脚本 此 google 脚本的目的是作为 Javascript 的简单替代方案
  • 谷歌脚本循环性能

    我是 google 脚本的新手 我不确定为什么与 Excel VBA 的简单循环相比 我的性能如此差 我附上了下面的代码 它是一个大约 1200 行的循环 每秒删除大约 2 3 行 我写的脚本效率很低吗 我还不熟悉 Javascript 但
  • 如何隐藏工作表?

    如何使用 googleScript 隐藏电子表格应用程序中的一些工作表 我有一个包含多个工作表的电子表格 我想使用 googlScript 将电子表格缩小为仅第一个可见工作表和所有其他隐藏工作表 sheet hideSheet https
  • 获取 Google Apps 脚本中新创建的文件夹的 ID

    作为 Google Apps 脚本项目的一部分 我尝试将活动电子表格和几个上传的文件移动到在共享目录中创建的新文件夹中 我已经能够使用以下命令创建新文件夹 DriveApp getFolderById parentFolder create
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • Google Add-on 在有限模式应用脚本中添加菜单项

    我们在新的谷歌应用程序脚本添加商店中发布了一个插件 但在除安装的初始电子表格之外的任何电子表格中使用该插件时 权限似乎无法正常工作 我遇到一个问题 当创建新电子表格并且用户从 管理加载项 菜单中选择 使用此加载项 时 我们的菜单项不会填充

随机推荐

  • 如何向 form_for 中的单个输入添加样式

    我正在使用带有 HAML 的 Rails 框架 并且我有引导程序设置 我将如何单独格式化字段输入 我希望名称输入字段为屏幕左侧浮动的 60 价格输入字段为屏幕左侧浮动的 25 我想我是在问如何将类添加到 form for 中的单个输入中 谢
  • 使用 LINQ 预加载完整的表

    我需要 LINQ 来获取整个表 但这似乎不起作用 每次我通过 pkey 选择值时 都会再次触发选择 所以 实际上这段代码 DataContext dc new DataContext dc Stores ToList Store st dc
  • 初始化 PHP 交互

    我经常发现PHP的交互模式 php a 非常有用 但如果我可以启动它并立即执行一些命令来初始化我的环境 那会更有用 比如运行自动加载器 设置一些use命名空间的快捷方式等 这是一个例子 include autoloader php use
  • Spark 数据集编码器:kryo() 与 bean()

    在 Spark 中处理数据集时 我们需要指定编码器来序列化和反序列化对象 我们可以选择使用Encoders bean Class
  • Python CTRL+C 退出解释器?

    Python 2 73 Why is it on my laptop when I hit CTRL C I can exit the interpreter and on my desktop hitting CTRL C will ma
  • 输出字符串末尾的空白不与字符串一起打印,而是与其后的下一个打印行一起打印

    我尝试打印一行 要求用户输入 获取输入 然后再次打印一些行 问题是 在我获得输入后 第一个打印行末尾的空白不是打印在该行的末尾 而是打印在第二个打印行的开头 我对 C 完全陌生 所以我不能真正尝试太多 但我尝试在没有提示用户输入的部分的情况
  • Spring消息标签javascript转义

    当我们尝试使用 spring 标签显示属性文件中的标签时 我们可以编写
  • 我可以获取标准库中定义的函数的地址吗?

    考虑以下代码 include
  • 使用 Windows.Services.Store Addons 模拟购买

    我编写了一个基于 Windows Services Store 的应用内购买系统 现在我希望确保我的用户得到他们所付出的代价 在旧的 API 中 我可以模拟购买 我怎样才能让每次购买成功 而不需要每次都从我的信用卡 贝宝中注入真钱 我无法返
  • 了解事件的前一个处理程序是否返回 false。 IE < 9 中的默认阻止?

    我设置了一个全局模式 正在加载 请稍候 div 在一个应用程序中 它每次都会显示 a or a div
  • Visual Studio Code 安装位置

    我几天前安装了 Visual Studio Code 但现在在我的计算机上找不到可执行文件 它在哪里 我已经检查了程序和功能 我还检查了我的路径 由于某种原因 它也不在其中 更新 10 11 2018 如果您进行完全重新安装 包括卸载计算机
  • 函数定义上的纯说明符

    在 GCC 上编译时我得到了错误 函数定义上的纯说明符 但当我使用 VS2005 编译相同的代码时则不然 class Dummy error pure specifier on function definition VS2005 comp
  • 如果我是 Python 新手,我应该使用哪个版本的 Python?

    如果我对 Python 完全陌生 并且正在阅读有关将语句打印到控制台 变量类型 集合等的内容 我应该使用哪个版本的 Python 我知道有大量适用于 Python 2 6 x 的第三方库 但我担心我会学到一些不能很好地移植到 Python
  • Vala vapi 文件文档

    我想使用 Vala 破解现有的基于 GLib 的 C 项目 基本上我正在做的是 在构建过程开始时 使用 valac 从 vala 文件生成 c 和 h 文件 然后像编译任何 c 或 h 文件一样编译生成的文件 这可能不是最好的方法 但在大多
  • Total Blank Unity / Microsoft Store Build 未通过 WACK 测试

    我一直在努力为我的游戏取得成功统一 2018 2 1f1 and 视觉工作室 2017 15 8 0 尝试为 Windows 商店成功构建 打包 WACK 失败后所有 每个不同的配置 我尝试了完全空白默认Unity UWP平台应用程序 生成
  • 下边框边距

    有什么方法可以只在边框上添加边距吗 只有边框应该有边距 而不是文本 我正在尝试移动边框而不是文本字段 需要缩小 移动边框而不是文本 CSS margin check border bottom 1px solid d2d7da margin
  • (已解决)插件选项不允许使用多个值 androidx.compose.compiler.plugins.kotlin:reportsDestination

    我正在使用 Android Studio 与 Kotlin 进行 Android 开发 我的项目中有40多个Android模块 其中一些是Java模块 一些主题是android模块 Kotlin Version 1 8 20 Hilt Ve
  • 在 WinForms 表单之间传递数据[重复]

    这个问题在这里已经有答案了 我在项目中创建了一个辅助表单 它可以从主表单获取数据 并且在单击按钮时应将一些数据传递到主表单 这是代码 Add cs private void button1 Click object sender Event
  • 将响应缓冲区转换为 JSON

    在 AWS 中 我使用 https 模块通过 Lambda 发出 get 请求 我能够返回数据 但当我调用时它是缓冲区格式的callback null obj https get options res gt res on data d g
  • 为什么我无法计算正确的 HMAC 签名?

    我正在尝试在 Google Apps 脚本中计算 HMAC 签名 但文档并未 100 清楚地说明我需要如何传递参数 并且我无法获得预期的输出 为了确定我是否获得正确的输出 我将结果与已知良好的 PHP 代码进行比较 该代码是 key a2V