如果你寫的PHP服務端API,在簽名中使用了PHP的hash_hmac函數,並且使用了base64編碼,
如下:
//HMAC-SHA1加密
$hmac_sha1_str = base64_encode(hash_hmac("sha1", $string_to_sign, $secret_access_key));
//編碼URL
$signature = urlencode($hmac_sha1_str);
現在一個Python客戶端程序想要來調用你的API,首先要通過安全認證,其簽名方法可實現如下:
signature = urllib.quote(
base64.b64encode(
hmac.new(secret_access_key, string_to_sign, digestmod=hashlib.sha1)
.hexdigest()
))
有兩點需要注意:
1. 不能使用encodestring, 因為該函數會在字符串末尾添加上行結束符號%0A,即\n
參見說明文檔:http://docs.python.org/library/base64.html
2. 不能使用hmac的digest方法,而需要使用hexdigest才能和PHP的hash_hmac結果對上。