2014-06-26 49 views
5

我正嘗試使用請求庫爲Python 3.4中的API調用創建一個HMAC-SHA512簽名請求。我正在嘗試關注文檔,但是發生了此錯誤:Python中的HMAC簽名請求

AttributeError: '_hashlib.HASH' object has no attribute 'new' 

下面是一些代碼。它在hmac構造函數的錯誤上失敗。如果我嘗試並通過hashlib.md5()或完全忽略摘要參數,那很好。

我不確定我是否在之後正確地簽署了請求,因爲我還沒有那麼遠。我試圖使用的服務文檔說用我的祕密在URL上簽名。我需要這是一個字節字符串才能工作。

import hmac 
import hashlib 
import requests 

secret = b'mysecret' 
url = b'http://someurl.com/something/' 

signing = hmac.new(secret, url, hashlib.sha512()) 

headers = {'apisign': signing.digest()} 
response = requests.get(url, headers=headers) 

任何指針讚賞。我找不到一個例子。謝謝!

回答

11

你必須在參考傳遞給調用它的hashlib.sha512調用,而不是結果:

signing = hmac.new(secret, url, hashlib.sha512) 

或者,你可以只使用字符串'sha512'

signing = hmac.new(secret, url, 'sha512') 

hashlib.new()會用於構造散列對象。

演示:

>>> import hashlib 
>>> import hmac 
>>> secret = b'mysecret' 
>>> url = b'http://someurl.com/something/' 
>>> signing = hmac.new(secret, url, hashlib.sha512) 
>>> signing.digest() 
b'!~s2\x97\x97\xa9\xcc\xefcb\xa8\xcc\xa7\xbc\xec\xe5\xfc\xc3\xac\xfc\xbc5]\x05\x96\xc7\x83\x8b\x1b\x90\xd3\xa5\xca\x8cLsC\x17\xa0\xea\xa3\xfe\xd8M\xfda\x1epj\x90\xff}\xfa\[email protected]\x92\xfb\xee\xa8\xab\x1b\x08\x8e' 
+0

哈,錯過了。謝謝! – Ludo