使用HMAC-SHA256的Python编码消息

时间:2016-06-30 21:34:34

标签: python api encode hmac

我尝试根据instructions

在python中用HMAC-SHA256编码消息
import hmac
import hashlib

nonce = 1234
customer_id = 123232
api_key = 2342342348273482374343434
API_SECRET = 892374928347928347283473

message = nonce + customer_id + api_key
signature = hmac.new(
    API_SECRET,
    msg=message,
    digestmod=hashlib.sha256
).hexdigest().upper()

但我得到了这个

  

回溯(最近一次呼叫最后一次):文件" gen.py",第13行,in          digestmod = hashlib.sha256 File" /usr/lib/python2.7/hmac.py" ;,第136行,in new       在 init 中返回HMAC(key,msg,digestmod)文件" /usr/lib/python2.7/hmac.py",第71行       如果len(键)> blocksize:TypeError:类型为' long'的对象没有len()

有没有人知道为什么会崩溃?

2 个答案:

答案 0 :(得分:4)

您正在使用api需要字符串/字节的数字。

# python 2
import hmac
import hashlib

nonce = 1234
customer_id = 123232
api_key = 2342342348273482374343434
API_SECRET = 892374928347928347283473

message = '{} {} {}'.format(nonce, customer_id, api_key)
signature = hmac.new(
    str(API_SECRET),
    msg=message,
    digestmod=hashlib.sha256
).hexdigest().upper()

print signature

答案 1 :(得分:1)

如果你想在python3中执行,你应该执行以下操作:

#python 3
import hmac
import hashlib

nonce = 1
customer_id = 123456
API_SECRET = 'thekey'
api_key = 'thapikey'

message = '{} {} {}'.format(nonce, customer_id, api_key)

signature = hmac.new(bytes(API_SECRET , 'latin-1'), msg = bytes(message , 'latin-1'), digestmod = hashlib.sha256).hexdigest().upper()
print(signature)