2016-11-22 12 views
1

Examples of How to Derive a Signing Key for Signature Version 4AWS4署名キー - このチュートリアルは間違っていますか?このページによると

このコードの結果:

$kSecret = "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY"; 

$kDate = hash_hmac('sha256', "20120215", "AWS4" . $kSecret); 
echo "date: " . $kDate . "<br>"; 

$kRegion = hash_hmac('sha256', "us-east-1", $kDate); 
echo "region: " . $kRegion . "<br>"; 

$kService = hash_hmac('sha256', "iam", $kRegion); 
echo "service: " . $kService . "<br>"; 

$kSigning = hash_hmac('sha256', "aws4_request", $kService); 
echo "signing: " . $kSigning . "<br>"; 

は印刷する必要があります:

kDate = '969fbb94feb542b71ede6f87fe4d5fa29c789342b0f407474670f0c2489e0a0d' 

kRegion = '69daa0209cd9c5ff5c8ced464a696fd4252e981430b10e3d3fd8e2f197d7a70c' 

kService = 'f72cfd46f26bc4643f06a11eabb6c0ba18780c19a8da0c31ace671265e3c87fa' 

kSigning = 'f4780e2d9f65fa895f9c67b32ce1baf0b0d8a43505a000a1a9e090d414db404d' 

だから、私が手kDateが正しいです。

a59e30f9d899c47b3dd68ea1c0ab3bb529e03a8f4ed2f54cb64af547330a22a0 

私はHMAC(hmac generator)を計算するためにこのウェブサイトを使用してみましたが、私は同じ結果を得る:私は値を取得するようkRegionが正しくありません。

enter image description here

ページが間違っている場合、私は本当に不思議。それは私のせいかAWSの不具合なのか誰でも説明できますか?

あなたは

+0

すぐにこれを削除してください。あなたのAWS秘密鍵を投稿しないでください。 –

+0

AWSが提供するキーの例です。 – MeV

+1

Oh、Phew。私は非常に多くの人々が実際の秘密鍵を投稿するのを見た。申し訳ありません。 –

答えて

2
  1. あなたは値があなたが進数に日付を渡している
  2. 16進形式でバイナリと印刷されて理解する必要がありますありがとうございました。 hash_hmacを呼び出す前にバイナリに変換して渡す必要があります。バイナリ形式で保存し、16進数で表示してください。
  3. 使用している言語は一度も言及していません。私はあなたが使用している言語を見つけるためにgoogleする必要がありました。 PHPでは、次のように渡すことができます:$ raw_output = trueバイナリ文字列を取得する
  4. 印刷する前に文字列nバイナリを格納し、hexに変換します。

私はPHPに慣れていないので、私は同じことをPythonで試して、出力が期待される出力と一致しました。私はそれを16進数に変換して印刷する方法を見てください。

import hmac 
import hashlib 
from base64 import b16encode as b16 

def sign(key, msg): 
    return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest() 

def getSignatureKey(key, dateStamp, regionName, serviceName): 
    kDate = sign(("AWS4" + key).encode("utf-8"), dateStamp) 
    print b16(kDate) 
    kRegion = sign(kDate, regionName) 
    print b16(kRegion) 
    kService = sign(kRegion, serviceName) 
    print b16(kService) 
    kSigning = sign(kService, "aws4_request") 
    print b16(kSigning) 
    return kSigning 

key = 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY' 
dateStamp = '20120215' 
regionName = 'us-east-1' 
serviceName = 'iam' 

getSignatureKey(key, dateStamp, regionName, serviceName) 

出力

969FBB94FEB542B71EDE6F87FE4D5FA29C789342B0F407474670F0C2489E0A0D 
69DAA0209CD9C5FF5C8CED464A696FD4252E981430B10E3D3FD8E2F197D7A70C 
F72CFD46F26BC4643F06A11EABB6C0BA18780C19A8DA0C31ACE671265E3C87FA 
F4780E2D9F65FA895F9C67B32CE1BAF0B0D8A43505A000A1A9E090D414DB404D 

PHP

string hash_hmac (string $algo , string $data , string $key [, bool $raw_output = false ]) 
+0

あなたの答えに多くの感謝。私はPHPを使用していると言わざるを得ないことを謝ります。私は今あなたがアドバイスしたテキスト変換で作業し、どこに問題があるかを見つけるでしょう! – MeV

+0

問題が解決しました。素晴らしい。ありがとうございました! – MeV

関連する問題