1
當人們&公司不提供其產品的可靠文檔時,我變得非常沮喪。無法模仿亞馬遜網絡服務簽名算法
根據這個網站:http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html
有看起來像這樣的算法:
import base64
import hmac
import sha
import urllib
h = hmac.new("OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV",
"GET\n\n\n1141889120\n/quotes/nelson",
sha)
urllib.quote_plus(base64.encodestring(h.digest()).strip())
這應該產生的結果是:
vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
我試過幾個變化,不同的字符集和不同的語言,我不能產生這個散列。我甚至下載了一些樣本,當我使用他們的簽名算法時,他們仍然不會產生這個散列。下面是C#代碼,我有:
byte[] bytesToSign = Encoding.UTF8.GetBytes("GET\n\n\n1141889120\n/quotes/nelson");
byte[] secretKeyBytes = Encoding.UTF8.GetBytes("OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV");
HMAC hmacSha256 = new HMACSHA256(secretKeyBytes);
byte[] hashBytes = hmacSha256.ComputeHash(bytesToSign);
string signature = Convert.ToBase64String(hashBytes);
,但它產生的價值:
a5n2tpQTlqetX6Pjvv7vK23qi2JIZVlWZqIdteD2pok=
是的,我可以看到他們與一個URL編碼器包裝,但也不會改變其本急劇下降。有沒有人知道他們可能用什麼算法來產生這個散列?我沒有想法。
唉。謝謝。我正在使用HMAC-SHA256,原因是:「您可以在簽名請求時使用HMAC-SHA256(我們更喜歡HMAC-SHA256,但我們仍然支持HMAC-SHA1)」:http://aws.amazon.com/文章/ 1928 –
它無法工作的原因在同一文檔中:您必須將SignatureMethod請求參數設置爲HmacSHA256或HmacSHA1,以指示您正在使用哪種簽名方法。您必須將SignatureVersion請求參數設置爲2 –