2016-03-25 13 views
0

secretの秘密とfooのペイロードを使用して、base64でエンコードされたHMAC SHA512ハッシュを作成しようとしています。 .NETコードを正しい値にすることができません。エンコーディングが根本的な問題であるかどうか疑問に思っています。.Net HMACとbase64エンコーディングの問題

コード:

UTF8Encoding encoding = new UTF8Encoding(); 
HMACSHA512 hmac = new HMACSHA512(encoding.GetBytes("secret")); // init the HMAC hash with "secret" as a byte array 
byte[] hash = hmac.ComputeHash(encoding.GetBytes("foo")); // hash the payload 
String result = Convert.ToBase64String(hash); // Base64 encode the payload 

間違ったハッシュ& base64の結果:

gt9xA96Ngt5F4BxF/mQrXRPGwrR97K/rwAlDHGZcb6Xz0a9Ol46hvekUJmIgc+vqxho0Ye/UZ+CXHHiLyOvbvg==

予想されるハッシュ& base64の結果:

ODJkZjcxMDNkZThkODJkZTQ1ZTAxYzQ1ZmU2NDJiNWQxM2M2YzJiNDdkZWNhZmViYzAwOTQzMWM2NjVjNmZhNWYzZDFhZjRlOTc4ZWExYmRlOTE0MjY2MjIwNzNlYmVhYzYxYTM0NjFlZmQ0NjdlMDk3MWM3ODhiYzhlYmRiYmU=

+1

、あなたはどこか別の場所からそれを取得する必要があります。これを見ているのはどこですか? – dana

+0

@dana node.jsプログラムと正しいハッシュを生成するPHPプログラムがあります。 – mark

答えて

2

2番目のバージョンはHex表現のBase64だけなので、バイト配列を最初に16進数に変換し、Base64 ASCIIバージョンの文字列に変換する必要があります。

ステップ:あなたは "期待" 結果を生成していない場合

+0

これはそれでした。あなたが参照した質問を見たことがありましたが、バイト[]を最初に16進数に変換する必要があると言わなければ意味がありませんでした。ありがとうございました。 – mark

関連する問題