2016-04-29 6 views
2

Ich versuche, eine REST API mit C# zu verwenden.HMAC-SHA1 in C generieren #

Der API-Ersteller hat unten Pseudocode für die hmac-Erstellung bereitgestellt.

var key1 = sha1(body); 
var key2 = key1 . SECRET_KEY; 
var key3 = sha1(key2); 
var signature = base64_encode(key3); 

In dem obigen Pseudo-Code, Körper ist html Anfrage Körper Zeichenfolge und secret_key ist das Geheimnis von REST API Anbieter zur Verfügung gestellt Schlüssel.

Nach meinem Wissen muss ich System.Security.Cryptography.HMACSHA1 Klasse verwenden, um dies zu implementieren.

Aber ich bin nicht in der Lage, obige Logik in C# vollständig zu implementieren.

Irgendwelche Vorschläge?

Antwort

2

Direkte Abbildung von oben Code auf C# wäre so etwas wie:

static string ComputeSignature(byte[] body, byte[] secret) { 
    using (var sha1 = SHA1.Create()) 
    { 
     var key1 = sha1.ComputeHash(body); 
     var key2 = key1.Concat(secret).ToArray(); 
     var key3 = sha1.ComputeHash(key2); 
     return Convert.ToBase64String(key3); 
    } 
} 

Wenn Sie Anfrage Körper als String haben, wandelt es in Byte-Array richtige Codierung, zum Beispiel:

var body = Encoding.UTF8.GetBytes(bodyAsString); 

Wenn Sie Ihr Geheimnis als String haben - das hängt davon ab, wie der API-Entwickler erwartet, dass es in ein Byte-Array konvertiert wird. Höchstwahrscheinlich ist es bereits HEX oder base64-codierte Zeichenfolge.