Cálculo de un hash SHA con una cadena + clave secreta en python

La API de productos de Amazon ahora requiere una firma con cada solicitud que bash generar Python.

El paso en el que me engancho es este:

“Calcule un HMAC compatible con RFC 2104 con el algoritmo hash SHA256 usando la cadena de arriba con nuestra clave de acceso secreto” ficticia “: 1234567890. Para obtener más información sobre este paso, consulte la documentación y los ejemplos de código de su lenguaje de progtwigción.

Dada una cadena y una clave secreta (en este caso 1234567890), ¿cómo calculo este hash usando Python?

———– ACTUALIZACIÓN ————-

    La primera solución que usa HMAC.new parece correcta, sin embargo, estoy obteniendo un resultado diferente al de ellos.

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

    De acuerdo con el ejemplo de Amazon cuando hash la clave secreta 1234567890 y la siguiente cadena

    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 

    Debería obtener la siguiente firma: 'Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg='

    Recibo esto: '411a59403c9f58b4a434c9c6a14ef6e363acc1d1bb2c6faf9adc30e20898c83b'

     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=' 
     >>> 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 digest = hmac.new(secret, msg=thing_to_hash, digestmod=hashlib.sha256).digest() signature = base64.b64encode(digest).decode() 

    Sé que esto suena tonto, pero asegúrate de no tener un espacio final en tu secreto por accidente.

    De http://docs.python.org/library/hashlib.html#module-hashlib (modificado un poco):

     import hashlib secretKey = "1234567890" m = hashlib.sha256() # Get string and put into givenString. m.update(givenString + secretKey) m.digest()