指示 に従って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、digestmod = hashlib.sha256ファイル "/usr/lib/python2.7/hmac.py"、行136、新しい戻り値HMAC(key、 msg、digestmod)ファイル "/usr/lib/python2.7/hmac.py"、71行目、initif len(key)> blocksize :TypeError:タイプ 'long'のオブジェクトにlen()がありません
なぜクラッシュするのか誰かが知っていますか?
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
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)