2016-11-17 9 views
1

Python 2.7で動作するコードで作業していますが、3.6で使用すると動作しません。これは、Amazon MWS APIコールのシグネチャをエンコードするためのものです。3.xと2.xでのPython HMAC /エンコーディング

はPython 2.7での元のコードは:

sig_encoded = base64.b64encode(hmac.new(str(self.secret_key), sig_data, hashlib.sha256).digest()) 

私は、ここにいくつかの他の記事を読んで指示に従っており、この思い付いた:

のPythonしかし3.6

key_enc = (bytes(self.secret_key, "utf-8")) 
    sig_data_enc = (bytes(sig_data, "utf-8")) 
    sig_encoded = base64.b64encode(hmac.new(key_enc, sig_data_enc, hashlib.sha256).digest()) 

これはAPIからエラーを返します。 Python 3.6で使用されているバージョンで何が問題になっていますか?

ありがとうございます!

答えて

1

私は答えを見つけることができました。 Python 3.6で動作するコードは、

return base64.b64encode(
     hmac.new(str(self.secret_key).encode('utf-8'), sig_data.encode('utf-8'), hashlib.sha256).digest()) 
です。