Ich muss die HMAC mithilfe der Hash-Funktion SHA256 berechnen. Ich habe einen geheimen Schlüssel im Base64-Format codiert. Außerdem gibt es ein Online-Tool, das den HMAC (verifiziert) korrekt berechnet. http://www.freeformatter.com/hmac-generator.html Ich schrieb den folgenden Code-Schnipsel:HMAC SHA256 Hash-Berechnung in C#
var signatureHashHexExpected = "559bd871bfd21ab76ad44513ed5d65774f9954d3232ab68dab1806163f806447";
var signature = "123456:some-string:2016-04-12T12:44:16Z";
var key = "AgQGCAoMDhASFAIEBggKDA4QEhQCBAYICgwOEBIUAgQ=";
var shaKeyBytes = Convert.FromBase64String(key);
using (var shaAlgorithm = new System.Security.Cryptography.HMACSHA256(shaKeyBytes))
{
var signatureBytes = System.Text.Encoding.UTF8.GetBytes(signature);
var signatureHashBytes = shaAlgorithm.ComputeHash(signatureBytes);
var signatureHashHex = string.Concat(Array.ConvertAll(signatureHashBytes, b => b.ToString("X2"))).ToLower();
System.Diagnostics.Debug.Assert(signatureHashHex == signatureHashHexExpected);
}
PROBLEM: Mein Code die richtige HMAC nicht erzeugen. Ich verifizierte verschiedene Schritte mit verschiedenen Online-Tools und alternativen C# -Implementierungen. Nur die Konvertierung von base64 wird nicht bestätigt. Was vermisse ich?
UPDATE: Berechnet signatureHashHex durch meinen Code "a40e0477a02de1d134a5c55e4befa55d6fca8e29e0aa0a0d8acf7a4370208efc"
ANTWORT: das Problem durch eine irreführende Dokumentation verursacht wurde den Schlüssel unter Angabe wird in Base64-Format zur Verfügung gestellt. Siehe die akzeptierte Antwort:
var shaKeyBytes = System.Text.Encoding.UTF8.GetBytes(key);
Sind Sie sicher, dass die Signatur in UTF8 codiert ist? –
Haben Sie das versucht: http://stackoverflow.com/q/33419006/479156 – Ivar
Nein, aber ich habe versucht, eine Reihe von verschiedenen Codierungen mit dem gleichen Ergebnis. – Kalitsov