web-dev-qa-db-ja.com

Python HMAC-SHA256でエンコードされたメッセージ

指示 に従って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()がありません

なぜクラッシュするのか誰かが知っていますか?

8
Oana Andone

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
7
Rz Mk

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)
6
nunodsousa