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.
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.