Frage

Ich entwickle eine Anwendung, die Verwendung einiger REST Web Services macht. Es ist technische Dokumentation sagt, dass ich SHA256 Hash einiger Zeichenfolge in der Anfrage übergeben soll.

In einem Beispiel Anfrage (in der Dokumentation) eine Zeichenfolge:

  

hn-Rw2ZHYwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires 1893013926label = [0] = any / somestatistics = 1d, 2d, 7d, 28d, 30d, 31d, lifetimestatus = UPL, livetitle = a

Nach dem Ausführen:

digest = Digest::SHA256.digest(string_to_sign)
signature = Base64::encode64(digest).chomp.gsub(/=+$/, '')

Ergebnisse in einem Hash:

  

YRYuN2zO + VvxISNp / vKQM5Cl6Dpzoin7mNES0IZJ06U

Dieses Beispiel ist in Ruby, wie die Dokumentation für Ruby-Entwickler ist.

Ich entwickle meine Anwendung in C # und für die genau gleiche Zeichenfolge, wenn ich ausführen:

byte[] rawHash = sha256.ComputeHash(rawRequest, 0, rawRequest.Length);
string friendlyHash = Convert.ToBase64String(rawHash);

und entfernen Sie die hintere "=" Zeichen, die ich erhalten:

  

Vw8pl / KxnjcEbyHtfNiMikXZdIunysFF2Ujsow8hyiw

und deshalb schlägt die Anwendung fehl, was zu einer Signatur Mismatch Fehler auszuführen.

Ich habe versucht, die Codierung zu ändern, während die Zeichenfolge in einem Byte-Array konvertiert vor dem Hashing und nichts geändert.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Basierend auf dem Dokument hier , die Sie vermissen eine - (das ist ein Bindestrich) in der Zeichenfolge. Es scheint, dass Acrobat es hilfreich in einer Kopie Paste entfernt aus dem Dokument ...

Hier ist ein Code, den ich splatted zusammen, die denselben Wert wie das Beispiel bekommt (gut es wäre, wenn Sie die letzte = getrimmt)

    string s = "hn-Rw2ZH-YwllUYkklL5Zo_7lWJVkrbShZPb5CD1expires=1893013926label[0]=any/somestatistics=1d,2d,7d,28d,30d,31d,lifetimestatus=upl,livetitle=a";

    SHA256Managed sh = new SHA256Managed();
    byte[] request = System.Text.UTF8Encoding.UTF8.GetBytes(s);
    sh.Initialize();
    byte[] b4bbuff = sh.ComputeHash(request, 0, request.Length);

    string b64 = Convert.ToBase64String(b4bbuff);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top