2016-01-13 99 views

回答

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