我在 binance 上遇到了以下命令,并尝试对其进行解压。请参见此处:https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md
(部分:POST /api/v1/order 的 SIGNED 端点示例)
openssl dgst -sha256 -hmac
我的理解是,它是对 openssl 命令的调用,用于生成摘要,摘要将属于标准规范所同意的 sha256 类型。我不明白的是标志-hmac
。它是什么,它在数学层面上起什么作用?
我解决问题的尝试:
openssl -hmac
我使用和进行了谷歌搜索,openssl dgst -hmac
但前 10 个结果对我毫无用处。所以我认为最好向更有经验的用户询问。
更新:
这些文档中没有提到该标志:https://www.mkssoftware.com/docs/man1/openssl_dgst.1.asp所以我开始相信它可能没有加密用途。虽然我现在还不确定。
我发现了与本问题中提到的标志类似的东西:https://stackoverflow.com/questions/7285059/hmac-sha1-in-bash
答案1
HMAC 也称为密钥哈希。因此,只有在签名生成时使用相同的密钥,才能在验证过程中生成相同的哈希。MAC 的结果称为认证标签。
HMAC 是一种特殊的构造,它使用两次哈希调用(在您的情况下是 SHA-256),该哈希在内部使用,并且不使用任何其他密码原语。因此,它可以被看作是一个特定的模式哈希本身。因此包含在数据表。
您的代码中缺少密钥数据,这当然是创建密钥哈希所必需的。这应该在之后显示-hmac
。不幸的是,openssl
需要密钥的二进制格式。有关更多信息,请参阅OpenSSL 邮件列表中的这个旧对话。
编辑#1:深入挖掘一下,如果您想将密钥指定为十六进制,则可以使用如下行:
echo -n "Hello world!" | openssl dgst -sha256 -mac hmac -macopt hexkey:01020304
该函数的输出是第二次运行哈希的结果,因此如果仅查看哈希/HMAC 结果的大小,则无法将其与 SHA-256 区分开来。当然,其内容与仅对数据进行哈希处理(或将密钥和数据连接起来)完全不同。
编辑 #2:但是,您没有指定密钥,因此实际上会跳过 HMAC 并使用 SHA-256。这已被标记为错误,请参阅这里
答案2
如果您使用的是 iOS(或 Mac OS...),我厌倦了乱搞,这是我写的评论..
https://apps.apple.com/it/app/hmac-sha256generator/id6448465719?l=en