2013-11-01 66 views
0

給定以下2個鹼基串簽名:HMAC-SHA1蟒生成與/

GET&https%3A%2F%2Fapi.trademe.co.nz%2Fv1%2FMyTradeMe%2FWatchlist%2Fall.json&oauth_consumer_key%3DE55FD61CBB8400F67CED12FD35761BEDED%26oauth_nonce%3D83236f86429111e3963c0e4586dd63b1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1383267848%26oauth_token%3D2A378A062E35415E242AD38EA01DE72977%26oauth_version%3D1.0 
GET&https%3A%2F%2Fapi.trademe.co.nz%2Fv1%2FMyTradeMe%2FWatchlist%2Fall.json&oauth_consumer_key%3DE55FD61CBB8400F67CED12FD35761BEDED%26oauth_nonce%3D83236f86429111e3963c0e4586dd63b1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1383267856%26oauth_token%3D2A378A062E35415E242AD38EA01DE72977%26oauth_version%3D1.0 

在這些2個字符串被oauth_timestamp,它們生成簽名如下唯一的區別:

jBy364dHhQ0kVqYSQePXqyzoDQE= 
enKa2bqAgghJNXZxRbTx/2ZQYFI= 

什麼苦惱我是第二個字符串在簽名中生成/,但不是第一個,導致oauth簽名不正確。

這是我的Python代碼生成簽名:

binascii.b2a_base64(hmac.new('{}&{}'.format(settings.OAUTH_SECRET, oauth_token_secret), base_string, sha1).digest())[:-1] 

回答

1

你的代碼是工作的罰款。 / is a valid base64 character, specifically 63.

如果你想要一個不同的行爲,你可以使用Python base64 libraryb64encode方法,並指定altchars=參數,以便您可以給替代字符替換+/

例如,如果你想使用修改的Base64的文件名(!非標),你會指定"+-"爲您altchars參數:

base64.b64encode(hmac.new(...), altchars='+-') 

然而,這可能不兼容您選擇使用的任何第三方端點。如果可能的話,只要堅持使用默認值就好多了。