我见过亚马逊的这个解决方案:http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
但我不明白他们想要的参数是什么(除了kSecret): 参数列表: kSecret kDate kRegion kService kSigning
有人可以解释一下吗? 谢谢你们
答案 0 :(得分:2)
您指向的文档是如何根据密钥派生签名密钥。看看他们用于计算签名的示例代码。也许这会帮助你理解。每个" k"他们创建的参数是先前计算的值的HMAC和密钥中的下一个值。
static byte[] HmacSHA256(String data, byte[] key) throws Exception {
String algorithm="HmacSHA256";
Mac mac = Mac.getInstance(algorithm);
mac.init(new SecretKeySpec(key, algorithm));
return mac.doFinal(data.getBytes("UTF8"));
}
static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName) throws Exception {
byte[] kSecret = ("AWS4" + key).getBytes("UTF8");
byte[] kDate = HmacSHA256(dateStamp, kSecret);
byte[] kRegion = HmacSHA256(regionName, kDate);
byte[] kService = HmacSHA256(serviceName, kRegion);
byte[] kSigning = HmacSHA256("aws4_request", kService);
return kSigning;
}
首先,他们采用前缀为AWS4
的密钥,并将其作为HMAC的关键,以格式YYYYMMDD
(每个文档)格式化日期。
接下来,他们将生成的HMAC用作HMAC的关键字,例如区域名us-east-1
。
接下来,他们将生成的HMAC用作HMAC的关键字,例如服务名ec2
。
最后,他们采用生成的HMAC并将其作为HMAC aws4_request
的关键。生成的密钥是派生的签名密钥。
获得签名密钥后,您可以按如下方式为请求生成签名:
signature = HexEncode(HMAC(derived-signing-key, string-to-sign))
有关将签名应用于请求的说明,请访问:
http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html