(Not-so) Cleverer Schlüssel verursacht Probleme mit SHA512 Hmac in Node JS

8

Das ist eine merkwürdige Frage, aber ich arbeite seit Stunden daran und mache keine großen Fortschritte. Ich hoffe, dass jemand hier beraten kann ...

Ich portiere ein Skript von PHP zu Knoten. Das PHP-Skript nutzt diese Funktion:

%Vor%

Ich habe dies im Knoten mit dem Kryptomodul reproduziert:

%Vor%

Ich habe überprüft, dass diese Funktionen den gleichen Hash erzeugen, wenn sie denselben Text und denselben Schlüssel erhalten.

Außer ...

Die Zeichenfolge, die für einen Schlüssel in PHP verwendet wird, sieht folgendermaßen aus: (Fragen Sie nicht)

%Vor%

Ich habe versucht, dies in Javascript wie folgt zu reproduzieren:

%Vor%

Aber es funktioniert nicht. (Ich nehme an, es muss etwas mit den Zeilenumbrüchen zu tun haben.)

Das Ersetzen der Zeilenumbrüche mit "\ r \ n" oder "\ n" wie im Folgenden funktioniert auch nicht:

%Vor%

Vorschläge, wie Sie das beheben können? (Es ist leider keine Option, den Hund loszuwerden.)

Vielen Dank (im Voraus) für Ihre Hilfe.

    
user1031947 14.03.2013, 04:53
quelle

3 Antworten

3

Warum nicht die BASE64-codierte Zeichenfolge speichern? Auf diese Weise müssen Sie sich keine Gedanken über Zeilenumbrüche, Leerzeichen oder Ähnliches machen.

Da Ihr PHP-Code den Schlüssel (scheinbar) korrekt speichert, versuchen Sie ein Skript wie:

%Vor%

Führen Sie es von der Befehlszeile aus, kopieren Sie den codierten Schlüssel und verwenden Sie ihn dann in Ihrem Javascript. Die Decodierung von base64-Strings ist zum Beispiel ein einfaches Problem; Base64-Kodierung und -Dekodierung in clientseitigem JavaScript

>     
MrTrick 14.03.2013, 06:49
quelle
1

Nach meinem Wissen gibt es keine Zeilenumbrüche in der ursprünglichen Zeichenfolge. Der Backslash am Ende sagt PHP, dass die nächste Zeile nur eine Fortsetzung des vorherigen ist. Um zu testen, ob ich richtig liege oder nicht, könnten Sie PHP dazu bringen, die Zeichenfolge auszudrucken und zu prüfen, ob darin Zeilenumbrüche enthalten sind. Aber ich vermute, dass Sie dies in einem langen oder verbundenen String in Javascript schreiben können.

    
Paul Wayper 14.03.2013 06:42
quelle
0

Ersetzen Sie alle Zeilenumbrüche in der PHP-Version durch \n (und keine Zeilenumbrüche) in der JS-Version. Wenn das nicht funktioniert, versuche sie alle durch \r\n zu ersetzen - ich wette, PHP übersetzt keine mehrzeiligen Literale in Windows-formatierter Quelle:)

    
hobbs 14.03.2013 04:57
quelle

Tags und Links