Created
September 17, 2015 01:08
-
-
Save heskyji/5167567b64cb92a910a3 to your computer and use it in GitHub Desktop.
Generate HMAC-SHA1 Signature using Python 3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import hashlib | |
import hmac | |
import base64 | |
def make_digest(message, key): | |
key = bytes(key, 'UTF-8') | |
message = bytes(message, 'UTF-8') | |
digester = hmac.new(key, message, hashlib.sha1) | |
#signature1 = digester.hexdigest() | |
signature1 = digester.digest() | |
#print(signature1) | |
#signature2 = base64.urlsafe_b64encode(bytes(signature1, 'UTF-8')) | |
signature2 = base64.urlsafe_b64encode(signature1) | |
#print(signature2) | |
return str(signature2, 'UTF-8') | |
result = make_digest('message', 'private-key') | |
print(result) | |
Thanks so much for this! However, I needed to call base64.standard_b64encode
to make this work.
I think python3 does not want to handle encoding/decoding taking str as input.
Below is the implementation... And base64.standard_b64encode helped.
def __init__(self, key, msg = None, digestmod = None):
"""Create a new HMAC object.
key: key for the keyed hash object.
msg: Initial input for the hash, if provided.
digestmod: A module supporting PEP 247. *OR*
A hashlib constructor returning a new hash object. *OR*
A hash name suitable for hashlib.new().
Defaults to hashlib.md5.
Implicit default to hashlib.md5 is deprecated and will be
removed in Python 3.6.
Note: key and msg must be a bytes or bytearray objects.
"""
if not isinstance(key, (bytes, bytearray)):
raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__)
thanks helpfull man made my day !!!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
why does the key and message has to be bytes in python 3, while in python 2, it requires str