我见过亚马逊的解决方案:http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html
但是我不明白他们想要的参数是什么(除了kSecret):参数的列表: kSecret kDate kRegion kService kSigning
谁能解释一下吗?谢谢你们
发布于 2016-01-13 19:49:34
您所指向的文档是如何基于秘密密钥派生签名密钥的。看看他们计算签名的示例代码。也许这会帮助你理解。他们创建的每个"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
https://stackoverflow.com/questions/34774975
复制相似问题