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.

8voto

Geordy James Punkte 2238

Im Gegensatz zu PHP, wo Sie einen MD5-Hash Ihres Textes durchführen können, indem Sie einfach die Funktion md5 aufrufen, d.h. md5($text) In Java wurde es ein wenig komplizierter gemacht. Ich habe es normalerweise durch den Aufruf einer Funktion implementiert, die den md5-Hash-Text zurückgibt. So habe ich es implementiert: Erstellen Sie zunächst eine Funktion namens md5hashing innerhalb Ihrer Hauptklasse wie unten angegeben.

public static String md5hashing(String text)
    {   String hashtext = null;
        try 
        {
            String plaintext = text;
            MessageDigest m = MessageDigest.getInstance("MD5");
            m.reset();
            m.update(plaintext.getBytes());
            byte[] digest = m.digest();
            BigInteger bigInt = new BigInteger(1,digest);
            hashtext = bigInt.toString(16);
            // Now we need to zero pad it if you actually want the full 32 chars.
            while(hashtext.length() < 32 ){
              hashtext = "0"+hashtext;   
            }
        } catch (Exception e1) 
        {
            // TODO: handle exception
            JOptionPane.showMessageDialog(null,e1.getClass().getName() + ": " + e1.getMessage());   
        }
        return hashtext;     
    }

Rufen Sie nun die Funktion wie unten angegeben auf, wann immer Sie sie benötigen.

String text = textFieldName.getText();
String pass = md5hashing(text);

Hier sehen Sie, dass an den Hashtext eine Null angehängt wird, damit er mit dem md5-Hashing in PHP übereinstimmt.

7voto

Mihai Danila Punkte 2079

Ich bin darüber gestolpert, weil ich GUIDs aus einem natürlichen Schlüssel für ein Programm synthetisieren möchte, das COM-Komponenten installiert; ich möchte so synthetisieren, dass ich den GUID-Lebenszyklus nicht verwalten muss. Ich werde MD5 verwenden und dann die UUID-Klasse verwenden, um eine Zeichenkette aus ihr zu erhalten. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 wirft dieses Problem auf).

In jedem Fall kann java.util.UUID aus den MD5-Bytes eine schöne Zeichenkette erzeugen.

return UUID.nameUUIDFromBytes(md5Bytes).toString();

0 Stimmen

Tatsächlich akzeptiert es nicht nur MD5-Bytes-Arrays (Größe == 16). Sie können ein Byte-Array beliebiger Länge übergeben. Es wird mit Hilfe von MD5 in ein MD5-Byte-Array umgewandelt MessageDigest (siehe nameUUIDFromBytes() Quellcode )

6voto

MD5 ist völlig in Ordnung, wenn Sie nicht die beste Sicherheit benötigen, und wenn Sie etwas wie die Integrität einer Datei überprüfen wollen, spielt die Sicherheit keine Rolle. In einem solchen Fall sollten Sie vielleicht etwas Einfacheres und Schnelleres in Betracht ziehen, wie Adler32, das auch von den Java-Bibliotheken unterstützt wird.

2 Stimmen

Wie kommen Sie darauf, dass die Dateiintegrität kein Sicherheitsproblem darstellt?

5voto

Aurangzeb Punkte 1439

Dieser gibt genau den md5-Wert an, den man mit der md5-Funktion von mysql oder den md5-Funktionen von php usw. erhält. Dies ist die von mir verwendete (Sie können sie nach Ihren Bedürfnissen ändern)

public static String md5( String input ) {
    try {
        java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
        byte[] array = md.digest(input.getBytes( "UTF-8" ));
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; i++) {
            sb.append( String.format( "%02x", array[i]));
        }
        return sb.toString();
    } catch ( NoSuchAlgorithmException | UnsupportedEncodingException e) {
        return null;            
    }

}

5voto

HimalayanCoder Punkte 9093
import java.security.MessageDigest

val digest = MessageDigest.getInstance("MD5")

//Quick MD5 of text
val text = "MD5 this text!"
val md5hash1 = digest.digest(text.getBytes).map("%02x".format(_)).mkString

//MD5 of text with updates
digest.update("MD5 ".getBytes())
digest.update("this ".getBytes())
digest.update("text!".getBytes())
val md5hash2 = digest.digest().map(0xFF & _).map("%02x".format(_)).mkString

//Output
println(md5hash1 + " should be the same as " + md5hash2)

1 Stimmen

Ist das die Sprache Kotlin?

3 Stimmen

@Isuru sieht aus wie Scala

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