Heim >类库下载 >java类库 >Java MD5-Verschlüsselungsalgorithmus

Java MD5-Verschlüsselungsalgorithmus

高洛峰
高洛峰Original
2016-11-05 10:18:211778Durchsuche

MD5 (Message Digest Algorithm 5), übersetzt als fünfte Ausgabe des Message Digest-Algorithmus, gehen wir davon aus, dass es auch historische Versionen mit Namen wie MD2 und MD3 geben kann Sie verstehen diesen Algorithmus überhaupt nicht. Wir können auch einige Hinweise aus der Benennung erkennen. Die sogenannte Zusammenfassung ist eine kurze Zusammenfassung. Wie die Abschlussarbeit, die ich geschrieben habe, ist sie eine kurze und aussagekräftige Zusammenfassung Zusammenfassend lässt sich sagen, dass die Funktion von MD5 in etwa so aussieht:


Die Funktion von MD5 ist um die Signierung umfangreicher Informationen mit einem privaten Schlüssel mithilfe einer digitalen Signatursoftware zu ermöglichen. Diese wurde zuvor in ein vertrauliches Format „komprimiert“ (d. h. durch Konvertieren einer Bytefolge beliebiger Länge in eine große Ganzzahl einer bestimmten Länge). wird hauptsächlich verwendet, um die Integrität und Konsistenz der Datenübertragung sicherzustellen.


Angenommen, A möchte eine Textdatei mit 1 Million Wörtern an einen entfernten Ort senden. Wenn B die Datei empfängt Wissen Sie, ob die Datei unterwegs manipuliert wurde? Wenn jemand die Datei auf halbem Weg abgeschnitten und manipuliert hat, ist der Inhalt nicht sehr gut, und MD5 ist zu diesem Zeitpunkt praktisch, egal wie groß die Datei ist -Längenzeichenfolge nach der MD5-Verschlüsselung, normalerweise 32 Bit. Zu diesem Zeitpunkt verschlüsselt A zunächst die Datei mit MD5, die erhaltene Chiffretextzeichenfolge wird auch an B übergeben. Wenn B die Datei empfängt, verschlüsselt er die Datei auch mit MD5, um zu sehen, ob Der erhaltene Chiffretext stimmt mit dem von A gesendeten überein. Wenn er konsistent ist, bedeutet dies, dass die Datei sicher ist.

In der Tat, wenn wir Dateien aus dem Internet herunterladen Manchmal befindet sich hinter der heruntergeladenen Datei ein MD5-Chiffretext, z. B. MD5 (e8027a87676ea48b3a3c9b0a4d8d87a0). Die Funktion ähnelt dem Beispiel, das ich oben angegeben habe (ich denke schon ...).


MD5 ist ein öffentlicher, irreversibler Algorithmus, was bedeutet, dass es keine Möglichkeit gibt, den Chiffretext direkt zu knacken, um die Quelldaten zu erhalten. Zur Information: md5 kann eine Verschlüsselungsoperation für eine Datei beliebiger Größe durchführen, um eine eindeutige 32-Bit-Zeichenfolge zu erhalten.


Nachdem Sie die Funktionen von MD5 kurz verstanden haben, können Sie sich den Code direkt ansehen.


Java-Code implementiert die MD5-Verschlüsselung


Führen Sie den Code aus und die Ausgabeergebnisse sind wie folgt:
package com.wang.encryption;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.security.MessageDigest;
/**
 * @author yogo.wang
 * @date 2016/11/04-下午1:02.
 */
public class MD5Test {
    public static String md5Encode(String msg) throws Exception{

        byte[] msgBytes = msg.getBytes("utf-8");
        /**
         * 声明使用Md5算法,获得MessaDigest对象
         */
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        /**
         * 使用指定的字节更新摘要
         */
        md5.update(msgBytes);
        /**
         * 完成哈希计算,获得密文
         */
        byte[] digest = md5.digest();
        /**
         * 以上两行代码等同于 byte[] digest = md5.digest(msgBytes);
         */
        return bytesToHexString(digest);
    }
    /**
     * 将byte数组转化为16进制字符串形式
     * @param bys
     * @return
     */
    public static String byteArr2hexString(byte[] bys){
        StringBuffer hexVal=new StringBuffer();
        int val=0;
        for (int i = 0; i < bys.length; i++) {
            //将byte转化为int  如果byte是一个负数就必须要和16进制的0xff做一次与运算
            val=((int)bys[i]) & 0xff;
            if(val<16){
                hexVal.append("0");
            }
            hexVal.append(Integer.toHexString(val));
        }

        return hexVal.toString();

    }

    public static void main(String[] args) throws Exception {
        String msg="helloworld";
        String result=md5Encode(msg);
        String result1=md5Encode(msg);
        System.out.println(result);
        System.out.println(result1);
    }

}

fc5e038d38a57032085441e7fe7010b0

fc5e038d38a57032 085441e7fe7010b0


Es ist ersichtlich, dass der erhaltene Chiffretext immer derselbe ist, wenn dasselbe Feld verschlüsselt wird. nehmen wir Ein Blick auf die Prinzipien und Anwendungen der MD5-Implementierung.

MD5-Implementierungsprinzipien und -Anwendungen

Ich habe gelesen, dass einige Freunde im Internet den MD5-Verschlüsselungscode, den sie selbst implementiert haben, nur halb verstanden haben einige Einführungen zu einigen Implementierungsschritten im Internet (schauen Sie sich einfach um).


Das Prinzip des MD5-Algorithmus ist hauptsächlich in die folgenden Schritte unterteilt:

1) Füllen: Füllen Sie zunächst die Länge (Bit) der Eingabeinformationen, sodass der Rest von 512 448 entspricht. Die Füllmethode besteht darin, eine 1 und n Nullen zu füllen.


 2) Informationslänge aufzeichnen: Verwenden Sie 64 Bit, um die Informationslänge vor dem Füllen zu speichern. Diese 64 Bits werden nach dem Ergebnis des ersten Schritts hinzugefügt, sodass die Informationslänge N*512 448 64=(N 1)*512 Bits beträgt.


3) Laden Sie die magische Standardzahl: Die magische Standardzahl ist (A=(01234567)16, B=(89ABCDEF)16, C=(FEDCBA98)16, D=(76543210) 16 ). Wenn es im Programm definiert ist, sollte es (A=0X67452301L, B=0XEFCDAB89L, C=0X98BADCFEL, D=0X10325476L) lauten.


 4) Vier Runden der Schleifenoperation: Die Anzahl der Schleifen ist die Anzahl der Gruppen (N 1).



Hier stellen wir hauptsächlich die MessageDigest-Klasse in Java vor. Sie können sehen, dass sich diese Klasse unter dem Paket java.security befindet Das Dokument bezieht sich auf MessageDigest. Die Beschreibung lautet wie folgt:

public abstract class MessageDigest
    extends MessageDigestSpi


Diese MessageDigest-Klasse stellt Anwendungen die Funktionalität von Message-Digest-Algorithmen wie MD5- oder SHA-Algorithmen bereit. Ein Message Digest ist eine sichere Einweg-Hash-Funktion, die Daten beliebiger Größe akzeptiert und einen Hash-Wert fester Länge ausgibt.


Das MessageDigest-Objekt beginnt mit der Initialisierung. Dieses Objekt verarbeitet Daten mithilfe der Update-Methode. Der Digest kann jederzeit durch Aufruf der Reset-Methode zurückgesetzt werden. Sobald alle zu aktualisierenden Daten aktualisiert wurden, sollte eine der Digest-Methoden aufgerufen werden, um die Hash-Berechnung abzuschließen.

Die Digest-Methode kann für eine bestimmte Menge aktualisierter Daten nur einmal aufgerufen werden. Nach dem Digest-Aufruf wird das MessageDigest-Objekt auf seinen Ausgangszustand zurückgesetzt.


Die Implementierung kann nach Belieben entscheiden, ob die klonbare Schnittstelle implementiert werden soll. Clientanwendungen können die Replizierbarkeit testen, indem sie versuchen, CloneNotSupportedException zu replizieren und abzufangen:


Beachten Sie, dass, wenn eine bestimmte Implementierung nicht replizierbar ist, während die Anzahl der Digests im Voraus bekannt ist, immer noch die Fähigkeit besteht, Zwischenprodukte zu berechnen Zusammenfassungen durch Instanziierung mehrerer Instanzen.
 MessageDigest md = MessageDigest.getInstance("SHA");
 try {
     md.update(toChapter1);
     MessageDigest tc1 = md.clone();
     byte[] toChapter1Digest = tc1.digest();
     md.update(toChapter2);
     ...etc.
 } catch (CloneNotSupportedException cnse) {
     throw new DigestException("couldn&#39;t make digest of partial content");
 }

Die Funktionen der Hauptmethoden wurden in den Kommentaren des obigen Codes angegeben und werden hier nicht vorgestellt


Die Anwendungsbereiche von MD5 können hauptsächlich in die folgenden unterteilt werden Kategorien:



1. Verhindern Sie Manipulationen (Überprüfung der Dateiintegrität), um zu verhindern, dass Kriminelle der Installation Trojaner hinzufügen Programm, ich kann sie auf der Website hinzufügen und die aus der Installationsdatei erhaltene MD5-Ausgabe veröffentlichen.

2. Verhindern Sie die direkte Anzeige von Klartext (Passwortverschlüsselung). Heutzutage speichern viele Websites den MD5-Wert des Benutzerpassworts in der Datenbank, wenn das Benutzerpasswort gespeichert wird. Selbst wenn Kriminelle auf diese Weise den MD5-Wert des Benutzerkennworts in der Datenbank erhalten, können sie das Kennwort des Benutzers nicht kennen.

3. Verhindern Sie die Ablehnung (digitale Signatur), und die Zertifizierungsstelle verwendet den MD5-Algorithmus, um zusammenfassende Informationen für die Datei zu erstellen und aufzuzeichnen. Dies kann Ärger verhindern, der dadurch entsteht, dass A die Angelegenheit in Zukunft nicht zugibt.

Obwohl MD5 ein irreversibler Algorithmus ist, bedeutet dies nicht, dass er nicht geknackt werden kann. Die meisten Benutzer verwenden beim Festlegen von Passwörtern Felder mit besonderer Bedeutung, z. B. Geburtstag, abgekürzter Name usw. Wenn ich es nehme Geben Sie Ihre relevanten Informationen ein und erraten Sie die Passwörter, die Sie möglicherweise verwenden, und verschlüsseln Sie sie dann alle mit MD5. Ich erhalte viele Chiffretexte und erhalte dann den Chiffretext Ihres Passworts und den in meiner Chiffretextbibliothek. Zum Vergleich: Wenn der Chiffretext dies kann Übereinstimmen, dann ist Ihr Passwort selbst destruktiv. Auf die gleiche Weise bieten viele Websites jetzt einige Online-MD5-Wertabfragefunktionen an. Wenn der MD5-Passwortwert in der Datenbank vorhanden ist, können Sie dies tun Erhalten Sie schnell seinen Passwortwert. Im obigen Code habe ich beispielsweise die Zeichenfolge „helloworld“ verschlüsselt. Wenn Sie nur den Chiffretext kennen, ist es unmöglich, meine Originaldaten zu knacken. Aber ist das wirklich der Fall? Schauen Sie sich eine Website an: http://pmd5.com/ Es ist geknackt und das Prinzip ist sehr einfach

Ausführlichere Textinformationen zu MD5 finden Sie in der Baidu-Enzyklopädie. Die Einführung ist sehr detailliert und lesenswert 🎜>

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn