gpt4 book ai didi

hmac - 如何在 Elixir 中生成 HMAC 字符串?

转载 作者:行者123 更新时间:2023-12-04 01:33:28 26 4
gpt4 key购买 nike

我正在尝试在 Elixir 中编写亚马逊产品广告 API 客户端。开发者指南描述了 the process for signing an API request其中必须使用请求和“ secret 访问 key ”创建 HMAC-SHA26 哈希。这是我为处理签署请求而编写的函数:

defp sign_request(url) do
url_parts = URI.parse(url)
request = "GET\n" <> url_parts.host <> "\n" <> url_parts.path <> "\n" <> url_parts.query
url <> "&Signature=" <> :crypto.hmac(:sha256, 'ThisIsMySecretAccessKey', request)
end

传递给函数的 url 看起来像这样: http://webservice.amazon.com/onca/xml?AssociateTag=ThisIsMyAssociateTag&AWSAccessKeyId=ThisIsMyAWSAccessKeyId&Keywords=stuff&Operation=ItemSearch&SearchIndex=Apparel&Service=AWSECommerceService&Timestamp=2014-11-22T12%3A00%3A00Z&Validate=True&Version=2013-08-01
我遇到的问题是,虽然 :crypto.hmac/3返回一个二进制文件,该二进制文件不是字符串;将返回值传递给 String.valid?/1返回 false .因此,我无法将返回值连接到 url 字符串的末尾以对请求进行签名。

我在使用 :crypto.hmac/3 不正确?有什么我想念的吗?我应该用另一种方法来解决这个问题吗?

最佳答案

当您使用 :crypto.hmac/3它以二进制格式返回基数为 16 的整数,您的问题可以这样解决:

:crypto.mac(:hmac, :sha256, "key", "The quick brown fox jumps over the lazy dog")
|> Base.encode16
这是来自 https://en.wikipedia.org/wiki/Hash-based_message_authentication_code#Examples_of_HMAC_.28MD5.2C_SHA1.2C_SHA256.29 的匹配示例

关于hmac - 如何在 Elixir 中生成 HMAC 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27082396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com