2016-03-25 16 views
0

Ich versuche, eine Base64-codierte HMAC SHA512-Hash mit einem Geheimnis von secret und einer Nutzlast von foo zu erstellen. Ich kann meinen .NET-Code nicht den richtigen Wert erzeugen lassen. Ich frage mich, ob die Codierung das zugrunde liegende Problem ist..Net HMAC und base64 Codierung Problem

Code:

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 

Der falsche Hash & base64 Ergebnis:

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

Die erwarteten Hash & base64 führen:

ODJkZjcxMDNkZThkODJkZTQ1ZTAxYzQ1ZmU2NDJiNWQxM2M2YzJiNDdkZWNhZmViYzAwOTQzMWM2NjVjNmZhNWYzZDFhZjRlOTc4ZWExYmRlOTE0MjY2MjIwNzNlYmVhYzYxYTM0NjFlZmQ0NjdlMDk3MWM3ODhiYzhlYmRiYmU=

+1

Wenn Sie die "erwartete" Ergebnis nicht zu erzeugen sind, müssen Sie es von woanders bekommen. Wo sehen Sie das? – dana

+0

@dana Ich habe ein Programm node.js und ein PHP-Programm, das den richtigen Hash erzeugt. – mark

Antwort

2

Da die zweite Version nur Base64 der Hexadezimaldarstellung ist, müssen Sie das Byte-Array zuerst in hexadezimale und dann als Base64-ASCII-Version der Zeichenfolge konvertieren.

Schritte:

+0

Das war es. Ich hatte die Fragen gesehen, auf die Sie verwiesen haben, aber es ergab keinen Sinn, dass es relevant war, bis Sie sagten, dass ich zuerst das Byte [] in hex konvertieren musste. Vielen Dank. – mark