Я очень расстраиваюсь, когда люди & компании не предоставляют надежную документацию для своих продуктов.Невозможно Mimic Amazon Web Services Signature Algorithm
Согласно этому сайту: 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/ articles/1928 –
Причина, по которой она не работает, находится в том же документе: вы должны установить параметр запроса SignatureMethod либо HmacSHA256, либо HmacSHA1, чтобы указать, какой метод подписки вы используете. Вы должны установить параметр запроса SignatureVersion равным 2 –