2016-11-17 7 views
1

파이썬 2.7에서 작동하는 코드로 작업하고 있지만 3.6과 함께 사용할 때는 작동하지 않습니다. Amazon MWS API 호출에 대한 서명을 인코딩하기위한 것입니다.3.x와 2.x의 파이썬 HMAC/인코딩

파이썬 2.7의 원래 코드 :

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

나는, 여기에 몇 가지 다른 게시물을 읽고 지침에 따라,이 함께했다 :

파이썬 그러나 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에서 오류를 리턴합니다. 파이썬 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())