Java-SHA256 Ausgänge verschiedene hash, PHP SHA256?
PHP-code:
echo hash('sha256', 'jake');
PHP Ausgabe:
cdf30c6b345276278bedc7bcedd9d5582f5b8e0c1dd858f46ef4ea231f92731d
Java-code:
String s = "jake";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(s.getBytes(Charset.forName("UTF-8")));
byte[] hashed = md.digest();
String s2 = "";
for (byte b : hashed) {
s2 += b;
}
System.out.println(s2);
Java-Ausgabe:
-51-1312107528211839-117-19-57-68-19-39-43884791-1141229-4088-12110-12-223531-11011529
Hatte ich erwartet, dass die beiden um das gleiche Ergebnis zurückgeben. Offensichtlich ist dies nicht der Fall ist. Wie bekomme ich die beiden übereinstimmen, oder ist es unmöglich?
EDIT: ich hatte einen Fehler gemacht, ich glaube ich habe die Antwort auf die Frage jetzt trotzdem.
- Überprüfen Sie Ihre Zeichen-Kodierung für PHP-arbeiten mit bytes, nicht Java verwenden UTF8 oder UTF16 (oder was)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, die ersten, was Sie tun müssen, ist eine einheitliche Kodierung. Ich habe keine Ahnung, was PHP tun, aber
"jake".getBytes()
verwenden, was auch immer Ihre Plattform, Standard-Codierung für Java. Das ist ein wirklich schlechte Idee. UTF-8 wäre wohl ein guter Anfang sein, vorausgesetzt, dass PHP meistert mit Unicode-strings, um mit zu beginnen. (Wenn nicht, werden Sie brauchen, um herauszufinden, was es ist tun und versuchen, um die beiden konsistente.) In Java verwenden Sie die überlastung vonString.getBytes()
die eineCharset
oder die eine, die nimmt den Namen einesCharset
. (Ich persönlich benutze gerne Guave istCharsets.UTF_8
.)Dann überreden, von PHP zu verwenden UTF-8 als gut.
Dann die Ausgabe des Java Ergebnisses in hex. Ich bezweifle sehr, dass der code, den Sie gegeben haben, ist der eigentliche code ausgeführt wird als sonst würde ich erwarten, dass die Ausgabe wie "[B@e48e1b". Was auch immer du tust umwandeln byte-array in einen string ändern, es zu verwenden, hex.
'jake'
, ein ASCII-string, das sollte der Ertrag der gleiche wie UTF-8. Dennoch, ich herzlich Sekunde die konsistente Kodierung Anforderung.Sie drucken das gleiche .. konvertieren byte [], um einen hex-string, dann werden Sie sehen, CDF30C6B345276278BEDC7BCEDD9D5582F5B8E0C1DD858F46EF4EA231F92731D als Java-Ausgabe auch:
Die Sie benötigen, zu konvertieren, zu verdauen, um einen HEX-string vor dem drucken aus. Beispiel-code kann gefunden werden hier.