用python中的string+密钥计算SHA散列

2024-04-28 17:42:41 发布

您现在位置:Python中文网/ 问答频道 /正文

Amazon产品API现在需要对我试图生成ushing Python的每个请求进行签名。

我被耽搁的一步是:

使用上面的字符串和我们的“伪”密钥1234567890,使用SHA256散列算法计算符合RFC 2104的HMAC。有关此步骤的详细信息,请参阅编程语言的文档和代码示例。”

给定一个字符串和一个密钥(在本例中是1234567890),如何使用Python计算这个散列?

————————————————————————————————————

使用HMAC.new的第一个解决方案看起来是正确的,但是我得到的结果与它们不同。

http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?rest-signature.html

根据Amazon的示例,当您散列密钥1234567890和以下字符串时

GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=I
temLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReview
s&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&
Version=2009-01-06

您应该获得以下签名:'Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg='

我明白了:'411a59403c9f58b4a434c9c6a14ef6e363acc1d1bb2c6faf9adc30e20898c83b'


Tags: 字符串com算法api示例amazon产品rfc
3条回答
import hmac
import hashlib
import base64

digest = hmac.new(secret, msg=thing_to_hash, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest).decode()

我知道这听起来很傻,但要确保你的秘密不会被偶然发现。

>>> import hmac
>>> import hashlib
>>> import base64
>>> s = """GET
... webservices.amazon.com
... /onca/xml
... AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06"""
>>> base64.b64encode(hmac.new("1234567890", msg=s, digestmod=hashlib.sha256).digest())
'Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg='
import hmac
import hashlib
import base64
dig = hmac.new(b'1234567890', msg=your_bytes_string, digestmod=hashlib.sha256).digest()
base64.b64encode(dig).decode()      # py3k-mode
'Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg='

相关问题 更多 >