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 –