在python中使用字符串+密钥计算SHA哈希

mym*_*ter 48 python hash sha256

亚马逊产品API现在需要签名,我正在尝试生成用于Python的每个请求.

我挂起的步骤是这一步:

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

给定一个字符串和一个密钥(在本例中为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
Run Code Online (Sandbox Code Playgroud)

你应该得到以下签名: 'Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg='

我得到这个: '411a59403c9f58b4a434c9c6a14ef6e363acc1d1bb2c6faf9adc30e20898c83b'

Sil*_*ost 101

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='
Run Code Online (Sandbox Code Playgroud)


Geo*_*ell 14

import hmac
import hashlib
import base64

digest = hmac.new(secret, msg=thing_to_hash, digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest).decode()
Run Code Online (Sandbox Code Playgroud)

我知道这听起来很傻,但要确保你的秘密没有意外的空间.


Fil*_*son 13

>>> 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='
Run Code Online (Sandbox Code Playgroud)


And*_*ton 5

来自http://docs.python.org/library/hashlib.html#module-hashlib(稍作修改):

import hashlib
secretKey = "1234567890"
m = hashlib.sha256()

# Get string and put into givenString.

m.update(givenString + secretKey)
m.digest()
Run Code Online (Sandbox Code Playgroud)