Java SHA256 gibt einen anderen Hashwert für PHP SHA256 aus?

7

PHP-Code:

echo hash('sha256', 'jake');

PHP-Ausgabe:

cdf30c6b345276278bedc7bcedd9d5582f5b8e0c1dd858f46ef4ea231f92731d

Java-Code:

%Vor%

Java-Ausgabe:

-51-1312107528211839-117-19-57-68-19-39-43884791-1141229-4088-12110-12-223531-11011529

Ich hatte erwartet, dass die beiden das gleiche Ergebnis zurückgeben würden. Offensichtlich ist dies nicht der Fall. Wie kann ich die beiden zusammenbringen oder ist das unmöglich?

EDIT: Ich hatte einen Fehler gemacht, denke, dass ich jetzt die Antwort auf die Frage habe.

    
Finbarr 13.01.2011, 13:41
quelle

3 Antworten

12

Nun, das erste was Sie tun müssen, ist eine konsistente String-Codierung. Ich habe keine Ahnung, was PHP tun wird, aber "jake".getBytes() verwendet, was auch immer die Standard-Kodierung Ihrer Plattform für Java ist. Das ist eine wirklich schlechte Idee . Die Verwendung von UTF-8 wäre wahrscheinlich ein guter Anfang, wenn man annimmt, dass PHP mit Unicode-Zeichenfolgen anfängt. (Wenn dies nicht der Fall ist, müssen Sie herausfinden, was ist und versuchen, die beiden konsistent zu machen.) Verwenden Sie in Java die Überladung von String.getBytes() , die ein Charset benötigt. oder derjenige, der den Namen eines Charset trägt. (Ich persönlich nutze gerne Guavas Charsets.UTF_8 .)

Überreden Sie dann PHP, auch UTF-8 zu verwenden.

Dann geben Sie das Java-Ergebnis in hex aus. Ich bezweifle sehr, dass der Code, den Sie angegeben haben, der eigentliche Code ist, den Sie verwenden, da ich ansonsten Ausgaben wie "[B @ e48e1b" erwarten würde. Was auch immer Sie tun, um das Byte-Array in einen String zu konvertieren, ändern Sie es in Hex.

    
Jon Skeet 13.01.2011, 13:44
quelle
6

Sie drucken dasselbe .. Konvertieren Sie Ihr Byte [] in eine hexadezimale Zeichenfolge, dann sehen Sie auch CDF30C6B345276278BEDC7BCEDD9D5582F5B8E0C1DD858F46EF4EA231F92731D als Java-Ausgabe:

%Vor%     
mglauche 13.01.2011 13:50
quelle
2

Sie müssen den Digest vor dem Ausdruck in eine HEX-Zeichenfolge konvertieren. Beispielcode finden Sie hier .

    
orlp 13.01.2011 13:44
quelle

Tags und Links