19

Trying to generate HMAC SHA256 signature for 3Commas, I use the same parameters from the official example, it should generate: "30f678a157230290e00475cfffccbc92ae3659d94c145a2c0e9d0fa28f41c11a"

But I generate: "17a656c7df48fa2db615bfc719627fc94e59265e6af18cc7714694ea5b58a11a"

Here is what I tried:

secretkey = 'NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j'
totalParams = '/public/api/ver1/accounts/new?type=binance&name=binance_account&api_key=XXXXXX&secret=YYYYYY'
print 'signature = '+hashlib.sha256((secretkey+totalParams).encode('ASCII')).hexdigest()

Can anyone help me out?

Sky
  • 193
  • 1
  • 1
  • 5
  • Same question, more answers: https://stackoverflow.com/questions/39767297/how-to-use-sha256-hmac-in-python-code – NeilG May 14 '22 at 05:25

2 Answers2

36

Try using the hmac module instead of the hashlib module:

import hmac
import hashlib
secret_key = b"NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j"
total_params = b"/public/api/ver1/accounts/new?type=binance&name=binance_account&api_key=XXXXXX&secret=YYYYYY"
signature = hmac.new(secret_key, total_params, hashlib.sha256).hexdigest()
print("signature = {0}".format(signature))

This gives the desired result:

signature = 30f678a157230290e00475cfffccbc92ae3659d94c145a2c0e9d0fa28f41c11a
Stuart Wakefield
  • 6,294
  • 24
  • 35
  • 1
    Why do you have 'b' before the variable. Like so `secret_key = b"` – JamesG Feb 06 '21 at 04:47
  • 5
    I'm using a bytes literal, which is effectively the equivalent of writing `''.encode('ASCII')` but without creating the intermediate string. As the hmac.new method call accepts bytes as its params. https://docs.python.org/3/library/stdtypes.html#bytes-objects – Stuart Wakefield Feb 07 '21 at 22:14
0

I did implement it using a different approach few years ago.

import hmac
import hashlib 
import binascii

def create_sha256_signature(key, message):
    byte_key = binascii.unhexlify(key)
    message = message.encode()
    return hmac.new(byte_key, message, hashlib.sha256).hexdigest().upper()

create_sha256_signature("E49756B4C8FAB4E48222A3E7F3B97CC3", "TEST STRING")

https://www.gauravvjn.com/generate-hmac-sha256-signature-in-python/

Gaurav Jain
  • 1,549
  • 1
  • 22
  • 30