使用 HMAC-SHA256 的 Python 编码消息
Posted
技术标签:
【中文标题】使用 HMAC-SHA256 的 Python 编码消息【英文标题】:Python encoded message with HMAC-SHA256 【发布时间】:2016-11-03 04:08:19 【问题描述】:我尝试根据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()
但我明白了
Traceback(最近一次调用最后一次):文件“gen.py”,第 13 行,在 digestmod=hashlib.sha256 文件“/usr/lib/python2.7/hmac.py”,第 136 行,新 return HMAC(key, msg, digestmod) File "/usr/lib/python2.7/hmac.py", line 71, in init if len(key) > blocksize: TypeError: 'long' 类型的对象没有 len()
有人知道为什么会崩溃吗?
【问题讨论】:
【参考方案1】:您正在使用 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
【讨论】:
【参考方案2】:如果你想在 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)
【讨论】:
为什么使用 latin-1?signature = hmac.new(bytes(API_SECRET , 'utf-8'), msg = bytes(message , 'utf-8'), digestmod = hashlib.sha256).hexdigest().upper()
以上是关于使用 HMAC-SHA256 的 Python 编码消息的主要内容,如果未能解决你的问题,请参考以下文章