hmac-sha1 in Ruby unterscheidet sich von C # HMACSHA1

8

Ich versuche, die API von ankoder.com zu testen und habe Probleme mit der Digest-Berechnung für Authentifizierungstoken . Das Beispiel ist Ruby, während ich versuche, von C # anzurufen. Wenn ich das Digest-Ergebnis zwischen HMAC-SHA1 vergleiche, habe ich Probleme mit dem Passkey-Ergebnis.

Um es hier einfach zu testen, ist der Code:

%Vor%

Was mir das Ergebnis gibt: "X / 0EngsTYf7L8e7LvoihTMLetlM = \ n" Wenn ich das in C # mit dem folgenden versuche:

%Vor%

Das Salz-Ergebnis ist das gleiche, aber das Passwort-Ergebnis ist anders - C # gibt mir:

QLC68XjQlEBurwbVwr7euUfHW / k =

Beide erzeugen das Salz: f5cab5092f9271d43d2e

Gibt es eine gute Idee, was passiert ist?

    
William Yeung 14.11.2009, 11:07
quelle

2 Antworten

10

Sie haben PrivateKey und salt an die falsche Stelle in Ihrem C # -Code gesetzt; pro Ruby-Code ist PrivateKey der geheime Schlüssel des HMAC.

Beachten Sie auch, dass Sie am Ende des von Ihrem Ruby-Programm erzeugten Hashes einen Zeilenumbruch eingefügt haben (entsprechend Ihrer Beispielausgabe). Sie müssen nicht den Zeilenumbruch einbeziehen oder die Hashes stimmen nicht überein.

Dieses C # -Programm korrigiert das erste Problem:

%Vor%     
Emerick Rogul 14.11.2009, 12:10
quelle
3

Ich sehe 2 Probleme,

  1. Sie haben Schlüssel / Daten umgekehrt. In Ruby ist private_key der Schlüssel und das Salz die Daten. In C # haben Sie das Gegenteil gemacht.
  2. Wenn in Ihren Strings Nicht-ASCII erlaubt ist, müssen Sie sicherstellen, dass Sie dieselbe Kodierung verwenden. Ruby behandelt alles als rohe Bytes, so dass das C # mit seiner Codierung übereinstimmen muss. Wenn jcode verwendet wird, sollte die Codierung in C # mit $ KCODE übereinstimmen.
ZZ Coder 14.11.2009 16:18
quelle

Tags und Links