Wie können Sie generieren den gleichen MD5-Hashcode in Java und C#?
Ich habe eine Funktion, die erzeugt einen MD5-hash in C# so:
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(data);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sb.Append(result[i].ToString("X2"));
}
return sb.ToString();
In java meine Funktion sieht wie folgt aus:
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(bytes,0,bytes.length);
String hashcode = new BigInteger(1,m.digest()).toString(16);
return hashcode;
Während der C# - code generiert: "02945C9171FBFEF0296D22B0607D522D" die java-codes erzeugt: "5a700e63fa29a8eae77ebe0443d59239".
Gibt es einen Weg zu erzeugen, die dieselbe md5-hash für die gleichen bytearray?
On demand:
Dies ist der testcode in java:
File file = new File(System.getProperty("user.dir") + "/HashCodeTest.flv");
byte[] bytes = null;
try {
bytes = FileUtils.getBytesFromFile(file);
} catch (IOException e) {
fail();
}
try {
generatedHashCode = HashCode.generate(bytes);
} catch (NoSuchAlgorithmException e) {
fail();
}
und das ist mein code in C#
var blob = GetBlobByHttpPostedFile(httpPostedFile);
var hashCode = Md5Factory.ConvertByteArray(blob);
private static byte[] GetBlobByHttpPostedFile(HttpPostedFile httpPostedFile)
{
var contentLength = httpPostedFile.ContentLength;
var result = new byte[contentLength];
var inputStream = httpPostedFile.InputStream;
inputStream.Read(result, 0, contentLength);
return result;
}
Cheers
Du hast geschrieben test code aber kein test data. Nicht geladen werden aus einer Datei oder über HTTP -, nur hart-code einige Daten (keine Daten) in Ihrem test.
Insbesondere, habe ich nur bearbeitet meine Antwort mit Beispielen von dem, was ich bin auf der Suche nach - und die tun zeigen die gleichen hash-Werte, die mit der code-das ist im Prinzip die gleichen wie deine. Beachten Sie, dass in Ihrem C# - code, den Sie sind, ignorieren das Ergebnis
Insbesondere, habe ich nur bearbeitet meine Antwort mit Beispielen von dem, was ich bin auf der Suche nach - und die tun zeigen die gleichen hash-Werte, die mit der code-das ist im Prinzip die gleichen wie deine. Beachten Sie, dass in Ihrem C# - code, den Sie sind, ignorieren das Ergebnis
Stream.Read
, das ist nie eine gute Idee...InformationsquelleAutor user29964 | 2010-05-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass sollte in Ordnung sein - obwohl Sie könnte machen Sie den Java-code einfacher, indem Sie einfach den Aufruf
statt
update
danndigest
.Sind Sie absolut sicher hast du die gleichen Daten in beiden Fällen? Könnten Sie die post-Probe-Programme zeigen dieses Manko mit der gleichen hard-codierte Daten?
EDIT: Hier ist die Art von test ich dachte. Diese beiden Programme das gleiche Ergebnis:
C#:
Java:
Durch die Nutzung dieser konnte ich den gleichen hash von C# und C++ - code. Ausgezeichnet!
InformationsquelleAutor Jon Skeet
Hallo ich m mit diesem code, und es funktioniert
C# - code :
- und Java-code :
Sie haben Ihre Entsprechung code für PHP?
InformationsquelleAutor estergones
Kam ich Kreuz das ähnliche Problem, dass wir mit Java MD5-Hash, um festzustellen, ob eine Datei verarbeitet wurde. Wir fanden, dass wir nicht erstellen, die denselben Hashwert mit .NET-Bibliothek. Ich habe versucht, alle oben genannten Vorschlag, leider ist es nicht für mich arbeiten.
Die Lösung fand ich später heraus ist: anstelle von create ähnliche Funktion .NET, rufen wir Java-Funktion direkt in .NET. Es gibt eine große open-source-Projekt namens Ja.NET. Im Grunde, was ich Tat, ist: erstellen Sie eine Java-Klasse, die erstellen von hash mit dem gleichen code. kompilieren Sie es mit Ja.NET javac. Dann mit bam kompiliert die generierte Java-Klasse-Datei in DLL und verwenden Sie es in meine .NET-Projekt.
InformationsquelleAutor Zhongjie Li
Ich weiß, das Thema ist alt, aber ich lief in das gleiche Problem nur jetzt und konnte Sie nicht finden, eine Antwort, die für mich gearbeitet. Ich schrieb einen patcher für ein Spiel und brauchte das
md5
hashcode
von Dateien, wie ein Weg, um sicherzustellen, dass die Dateien aktuell sind, aber C# und Java gab mir verschiedene strings, obwohl die Dateien identisch waren.Hier ist, wie ich es gelöst:
C# - Code:
Dies schafft eine 32-stellige hex-string.
Apache Commons
DigestUtils.md5Hex(InputStream)
macht das gleiche, jetzt muss Sie nur anders ist, dass der C# - Beispiel wird ein groß-string, so ist die Lösung einfach zu konvertieren das hash aus dem Java-Programm in einen Großbuchstaben string.Java-code:
Die erzeugten hashes Aussehen
F674865D8A44695A2443017CFA2B0C67
.Hoffe, das jemand hilft.
InformationsquelleAutor spacecoyote