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.

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

32voto

andrewrjones Punkte 1720

Eine weitere Möglichkeit ist die Verwendung der Guava Hashing-Methoden :

Hasher hasher = Hashing.md5().newHasher();
hasher.putString("my string");
byte[] md5 = hasher.hash().asBytes();

Praktisch, wenn Sie bereits Guava verwenden (was Sie wahrscheinlich tun sollten, wenn Sie es nicht tun).

3 Stimmen

Oder eine der Abkürzungsmethoden verwenden: Hashing.md5().hashString("my string").asBytes();

4 Stimmen

@KurtAlfredKluever Vergessen Sie nicht, den Zeichensatz wie 'Hashing.md5().hashString("meine Zeichenkette", Charsets.UTF_8).asBytes()' einzufügen

29voto

fitorec Punkte 992

Ich habe eine Klasse (Hash), um einfachen Text in Hash-Formate zu konvertieren: md5 oder sha1, ähnlich wie die php-Funktionen ( md5 , sha1 ):

public class Hash {
    /**
     * 
     * @param txt, text in plain format
     * @param hashType MD5 OR SHA1
     * @return hash in hashType 
     */
    public static String getHash(String txt, String hashType) {
        try {
                    java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType);
                    byte[] array = md.digest(txt.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) {
                //error action
            }
            return null;
    }

    public static String md5(String txt) {
        return Hash.getHash(txt, "MD5");
    }

    public static String sha1(String txt) {
        return Hash.getHash(txt, "SHA1");
    }
}

Testen mit JUnit und PHP

PHP-Skript:

<?php

echo 'MD5 :' . md5('Hello World') . "\n";
echo 'SHA1:' . sha1('Hello World') . "\n";

PHP-Skript ausgeben:

MD5 :b10a8db164e0754105b7a99be72e3fe5
SHA1:0a4d55a8d778e5022fab701977c5d840bbc486d0

Beispiel und Testen mit JUnit verwenden:

    public class HashTest {

    @Test
    public void test() {
        String txt = "Hello World";
        assertEquals("b10a8db164e0754105b7a99be72e3fe5", Hash.md5(txt));
        assertEquals("0a4d55a8d778e5022fab701977c5d840bbc486d0", Hash.sha1(txt));
    }

}

Code auf GitHub

https://github.com/fitorec/java-hashes

0 Stimmen

Wie @CedricSimon sagte, ist das genau das, wonach ich gesucht habe. Upvote hier.. Danke!

22voto

marioosh Punkte 25753

Meine nicht sehr aufschlussreiche Antwort:

private String md5(String s) {
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.update(s.getBytes(), 0, s.length());
        BigInteger i = new BigInteger(1,m.digest());
        return String.format("%1$032x", i);         
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return null;
}

0 Stimmen

Und String.format("%1$032X", big) ein Großbuchstabenformat zu haben

18voto

Raul Luna Punkte 1771

Es gibt eine DigestUtils Klasse in Frühling auch:

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/util/DigestUtils.html

Diese Klasse enthält die Methode md5DigestAsHex() das die Aufgabe erfüllt.

0 Stimmen

BTW: Die Leistung dieser Methode ist viel besser als die Verwendung von BigInteger zur Erstellung der Hex-String-Darstellung.

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