使用ruby中的SHA256哈希算法计算符合RFC 2104的HMAC

时间:2013-05-17 00:08:43

标签: ruby amazon amazon-product-api

我正在浏览亚马逊产品广告API REST signature docs而我被困在#8

  

使用上面的字符串和我们的“虚拟”秘密访问密钥:1234567890,使用SHA256哈希算法计算符合RFC 2104的HMAC。有关此步骤的更多信息,请参阅编程语言的文档和代码示例。

没关系,设法在Calculating a SHA hash with a string + secret key in python的帮助下再试一次。将在下面发表答案。

3 个答案:

答案 0 :(得分:15)

以下内容创建了正确的签名:

require 'openssl'

secret_key = '1234567890'
query = 'AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06'
data = ['GET', 'ecs.amazonaws.com', '/onca/xml', query].join("\n")
sha256 = OpenSSL::Digest::SHA256.new
sig = OpenSSL::HMAC.digest(sha256, secret_key, data)
signature = Base64.encode64(sig)

答案 1 :(得分:2)

添加到AJcodez答案:

我愿意:

...
signature_raw = Base64.strict_encode64(sig)
signature     = CGI::escape(signature_raw)

encode64在最后添加换行符,strict_encode64()没有。

https://stackoverflow.com/a/2621023/2760406

亚马逊希望您对签名中的加号(+)和等号(=)进行URL编码" #9 - 如果你没有,现在就不会工作。

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html#rest_detailedexample

答案 2 :(得分:0)

您可以使用cryptoJs与您的秘密访问密钥一起计算密钥哈希消息认证代码(HMAC-SHA256)签名

首先通过键入

在系统中本地安装cryptoJs
class QuittanceRegister(forms.Form):
    du=forms.DateField(required =True,widget=forms.widgets.DateInput(attrs= {'type': 'date'}))
    au=forms.DateField(widget=forms.widgets.DateInput(attrs={'type': 'date'}))

要在全局安装它,请在上述命令的节点上加上-g标志。然后添加此代码并运行它。

npm install crypto-js