Wie kann ich einen MD5-Hash in Java generieren?

Lesezeit: 4 Minuten

Wie kann ich einen MD5 Hash in Java generieren
Akshay

Gibt es eine Methode zum Generieren von MD5-Hash einer Zeichenfolge in Java?

  • stackoverflow.com/questions/304268/…

    – Leif Grünwoldt

    7. September 2012 um 20:07 Uhr

  • MD5 ist möglicherweise als Einweg-Sicherheitsfunktion unsicher, aber es ist immer noch gut für generische Prüfsummenanwendungen.

    – rostig

    6. Februar 2015 um 15:57 Uhr

1646641028 209 Wie kann ich einen MD5 Hash in Java generieren
Bombe

Du brauchst java.security.MessageDigest.

Anruf MessageDigest.getInstance("MD5") um eine MD5-Instanz von zu erhalten MessageDigest Sie können verwenden.

Berechnen Sie den Hash, indem Sie einen der folgenden Schritte ausführen:

  • Füttern Sie die gesamte Eingabe als a byte[] und berechnen Sie den Hash in einem Vorgang mit md.digest(bytes).
  • Füttere die MessageDigest ein byte[] Stück für Stück durch Aufrufen md.update(bytes). Wenn Sie mit dem Hinzufügen von Eingabebytes fertig sind, berechnen Sie den Hash mit
    md.digest().

Die byte[] von zurückgegeben md.digest() ist der MD5-Hash.

  • Eine Sache, die hier nicht erwähnt wird und mich überrascht hat. Die MessageDigest-Klassen sind NICHT Thread-sicher. Wenn sie von verschiedenen Threads verwendet werden sollen, erstellen Sie einfach einen neuen, anstatt zu versuchen, sie wiederzuverwenden.

    – mjuarez

    7. März 2013 um 6:34 Uhr

  • Es verwendet mehrere Methoden, um seinen internen Zustand zu verändern. Wie kann der Mangel an Fadensicherheit überhaupt überraschen?

    – Bombe

    25. April 2013 um 7:57 Uhr

  • @Bombe: warum sollten wir damit rechnen verfügen über den internen Zustand von MessageDigest kennen?

    – Dan Barowy

    1. Juli 2014 um 14:10 Uhr

  • @DanBarowy Nun, du sind es zu mutieren (dh Methoden aufzurufen, die keine Werte zurückgeben, aber dazu führen, dass andere Methoden andere Werte zurückgeben), so dass Sie bis zum Beweis des Gegenteils immer davon ausgehen sollten, dass dies nicht Thread-sicher ist.

    – Bombe

    9. Juli 2014 um 18:17 Uhr

  • @Traubenfuchs MessageDigest erlaubt Ihnen, die Daten in Blöcken einzugeben. Das wäre mit einer statischen Methode nicht möglich. Obwohl Sie argumentieren können, dass sie der Einfachheit halber sowieso eine hätten hinzufügen sollen, wenn Sie alle Daten auf einmal übergeben können.

    – Benutzer253751

    16. August 2015 um 12:39 Uhr

  • @BalusC: Nicht wahr, die BigInteger.toString-Methode gibt die vollständige Zahl in der angegebenen Basis zurück. 0x0606 wird als 606 ausgegeben, nur nachgestellte Nullen werden weggelassen,

    – Spidy

    29. August 2010 um 22:29 Uhr

  • Kleiner Nitpick: m.reset() ist direkt nach dem Aufruf von getInstance nicht erforderlich. Kleiner: „Ihr Text hier“ erfordert doppelte Anführungszeichen.

    – David Leppik

    19. April 2011 um 15:28 Uhr

  • Ab Java 11 können Sie verwenden hashtext = "0".repeat(32 - hashtext.length()) + hashtext anstatt des whilesodass die Editoren Sie nicht warnen, dass Sie eine Zeichenfolgenverkettung innerhalb einer Schleife durchführen.

    – tom

    14. Mai 2019 um 13:29 Uhr

  • Anstelle von m.update(plaintext.getBytes()); Ich würde empfehlen, die Codierung anzugeben. wie m.update(plaintext.getBytes(“UTF-8”)); getBytes() garantiert die Codierung nicht und kann von System zu System variieren, was zu unterschiedlichen MD5-Ergebnissen zwischen Systemen für denselben String führen kann.

    – Benutzer1819780

    27. März 2020 um 5:35 Uhr


Wie kann ich einen MD5 Hash in Java generieren
lutsch

Vielleicht möchten Sie sich auch die ansehen DigestUtils Klasse des Apachen Commons-Codec project, das sehr praktische Methoden zum Erstellen von MD5- oder SHA-Digests bietet.

  • Insbesondere die Methoden, die “sichere” codierte Darstellungen der Bytedaten in Zeichenfolgenform zurückgeben.

    – Rauben

    7. Januar 2009 um 19:21 Uhr

  • Es gibt jedoch keine einfache Möglichkeit, die DigestUtils-Klasse in Ihr Projekt zu integrieren, ohne eine Menge Bibliotheken hinzuzufügen oder die Klasse “per Hand” zu portieren, was mindestens zwei weitere Klassen erfordert.

    – iuiz

    23. Juli 2011 um 20:52 Uhr


  • Kann es auch nicht in Maven Repos finden. Grrrr.

    – Funkenspinne

    4. Oktober 2011 um 16:05 Uhr

  • Sollte in den zentralen Maven-Repositories sein, es sei denn, ich werde verrückt: groupId=commons-codec artifactId=commons-codec version=1.5

    – Nick Spacek

    12. Oktober 2011 um 17:10 Uhr


1646641030 536 Wie kann ich einen MD5 Hash in Java generieren
dac2009

Ich habe es gefunden:

public String MD5(String md5) {
   try {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] array = md.digest(md5.getBytes());
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; ++i) {
          sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
       }
        return sb.toString();
    } catch (java.security.NoSuchAlgorithmException e) {
    }
    return null;
}

Auf der Website unten nehme ich keine Anerkennung dafür, aber es ist eine Lösung, die funktioniert! Für mich hat viel anderer Code nicht richtig funktioniert, am Ende fehlten 0s im Hash. Dieser scheint derselbe zu sein wie PHP. Quelle: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093

  • Insbesondere die Methoden, die “sichere” codierte Darstellungen der Bytedaten in Zeichenfolgenform zurückgeben.

    – Rauben

    7. Januar 2009 um 19:21 Uhr

  • Es gibt jedoch keine einfache Möglichkeit, die DigestUtils-Klasse in Ihr Projekt zu integrieren, ohne eine Menge Bibliotheken hinzuzufügen oder die Klasse “per Hand” zu portieren, was mindestens zwei weitere Klassen erfordert.

    – iuiz

    23. Juli 2011 um 20:52 Uhr


  • Kann es auch nicht in Maven Repos finden. Grrrr.

    – Funkenspinne

    4. Oktober 2011 um 16:05 Uhr

  • Sollte in den zentralen Maven-Repositories sein, es sei denn, ich werde verrückt: groupId=commons-codec artifactId=commons-codec version=1.5

    – Nick Spacek

    12. Oktober 2011 um 17:10 Uhr


1646641030 606 Wie kann ich einen MD5 Hash in Java generieren
bläulich

So benutze ich es:

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 dem Apache Commons-Projekt.

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

    – Tintenfisch

    25. Oktober 2010 um 15:10 Uhr

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

    – bläulich

    24. Mai 2011 um 9:35 Uhr

964300cookie-checkWie kann ich einen MD5-Hash in Java generieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy