1098 Stimmen

Wie kann ich einen MD5-Hash in Java erzeugen?

Gibt es eine Methode, um einen MD5-Hash einer Zeichenkette in Java zu erzeugen?

2 Stimmen

46 Stimmen

MD5 mag als einseitiges Sicherheitsmerkmal unsicher sein, aber für allgemeine Prüfsummenanwendungen ist es immer noch gut geeignet.

99voto

rednoah Punkte 903

Ich habe festgestellt, dass dies die klarste und prägnanteste Methode ist, um dies zu tun:

MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(StandardCharsets.UTF_8.encode(string));
return String.format("%032x", new BigInteger(1, md5.digest()));

3 Stimmen

Großartig. Sie tappt nicht in die Falle, führende Nullen abzuschneiden.

2 Stimmen

Beachten Sie, dass dies für Android nicht funktioniert, wenn Sie API-Level < 19 verwenden, aber Sie müssen nur die zweite Zeile mit md5.update(string.getBytes("UTF-8")) ändern; Dies fügt jedoch eine weitere geprüfte Ausnahme hinzu, die behandelt werden muss...

98voto

adranale Punkte 2750

Ich verwende es folgendermaßen:

final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
final String result = new String(Hex.encodeHex(resultByte));

wo Hex ist: org.apache.commons.codec.binary.Hex von der Apache-Commons-Projekt .

16 Stimmen

Wenn Sie Apache Commons Codec verwenden, können Sie es trotzdem benutzen: commons.apache.org/codec/api-release/org/apache/commons/codec/

15 Stimmen

Ich würde die letzte Zeile durch diese ersetzen: String result = Hex.encodeHexString(resultByte);

87voto

Eugene Punkte 4233

Ich habe gerade heruntergeladen commons-codec.jar und erhielt perfekte php wie md5. Hier ist Handbuch .

Importieren Sie es einfach in Ihr Projekt und verwenden Sie

String Url = "your_url";

System.out.println( DigestUtils.md5Hex( Url ) );

und da haben Sie es.

1 Stimmen

Dies ist die Methode, die den gleichen Rückgabewert wie die MySQL-Funktion md5(str) liefert. Viele der anderen Antworten haben andere Werte zurückgegeben.

1 Stimmen

Unter Android funktioniert das nicht richtig, da Android den commons-codec 1.2 bündelt, für den Sie diesen Workaround benötigen: stackoverflow.com/a/9284092/2413303

0 Stimmen

Funktioniert perfekt für den MD5-Hash der Gravatar-E-Mails, vielen Dank!

37voto

Fatih Karatana Punkte 2290

Es ist nicht nötig, es zu kompliziert zu machen.
DigestUtils funktioniert einwandfrei und macht die Arbeit mit md5 Hashes.

DigestUtils.md5Hex(_hash);

oder

DigestUtils.md5(_hash);

Sie können auch andere Verschlüsselungsmethoden verwenden, z. B. sha o md .

35voto

stacker Punkte 65961

Eine weitere Umsetzung:

import javax.xml.bind.DatatypeConverter;

String hash = DatatypeConverter.printHexBinary( 
           MessageDigest.getInstance("MD5").digest("SOMESTRING".getBytes("UTF-8")));

2 Stimmen

Der einzige Einzeiler, den ich kenne, der keine externe Bibliothek verwendet.

0 Stimmen

Wenn ich mich nicht irre, wird dies immer in Großbuchstaben zurückgegeben, was nicht mit md5s übereinstimmt, die ohne die Verwendung von Hexadezimalwerten erstellt wurden. Nicht einmal wirklich sicher, dass es ein echter md5 ist

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X