Skip to content

Instantly share code, notes, and snippets.

@binaryatrocity
Last active April 9, 2021 15:20
Show Gist options
  • Save binaryatrocity/7079332cab038da1394d to your computer and use it in GitHub Desktop.
Save binaryatrocity/7079332cab038da1394d to your computer and use it in GitHub Desktop.
HMAC-SHA1 Python example
from sys import argv
from base64 import b64encode
from datetime import datetime
from Crypto.Hash import SHA, HMAC
def create_signature(secret_key, string):
""" Create the signed message from api_key and string_to_sign """
string_to_sign = string.encode('utf-8')
hmac = HMAC.new(secret_key, string_to_sign, SHA)
return b64encode(hmac.hexdigest())
def create_token(access_key):
string_to_sign = "POST\n"+\
"application/x-www-form-urlencoded\n"+\
datetime.utcnow().strftime("%Y-%m-%dT%H:%M")
user_secret_key = access_key # Should be looked up based on access_key
hmac = create_signature(access_key, string_to_sign)
signature = "AUTH:" + access_key + ":" + hmac
return signature
def authenticate_signed_token(auth_token):
""" Take token, recreate signature, auth if a match """
lead, access_key, signature = auth_token.split(":")
if lead.upper() == "AUTH":
our_token = create_token(access_key).split(":", 1)[-1]
return True if signature == our_token else False
if __name__ == "__main__":
print create_token('secret_api_key')
print authenticate_signed_token(argv[1])
@jiacai2050
Copy link

Above snippet is for Python 3.

# This is for Python 2
from hashlib import sha1
import hmac
def create_signature(secret_key, string):
    string_to_sign = string.encode('utf-8')
    hashed = hmac.new(secret_key,string_to_sign, sha1)
    return hashed.hexdigest()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment