Heim >Java >javaLernprogramm >Java MD5-Verschlüsselungsalgorithmus

Java MD5-Verschlüsselungsalgorithmus

伊谢尔伦
伊谢尔伦Original
2016-12-10 09:19:171491Durchsuche

MD5 (Message Digest Algorithm 5), übersetzt als fünfte Ausgabe des Message Digest Algorithms, gehen wir davon aus, dass es möglicherweise auch historische Versionen mit Namen wie MD2 und MD3 gibt.

Sogar Wenn Sie diesen Algorithmus überhaupt nicht verstehen, können wir auch einige Hinweise aus der Benennung erkennen. Die sogenannte Zusammenfassung ist wie die Abschlussarbeit, die ich geschrieben habe, eine kurze und aussagekräftige Zusammenfassung Zusammenfassung des folgenden langen Artikels: Die Funktion von MD5 sieht in etwa so aus:

Die Funktion von MD5 ist um zu ermöglichen, dass Informationen mit großer Kapazität „signiert“ werden, bevor der private Schlüssel mithilfe digitaler Signatursoftware in ein vertrauliches Format „komprimiert“ wird (d. h. eine Bytefolge beliebiger Länge in eine große Ganzzahl einer bestimmten Länge umgewandelt wird). Dies wird hauptsächlich verwendet, um die Integrität und Konsistenz der Datenübertragung sicherzustellen.

Angenommen, A möchte B aus der Ferne eine Textdatei mit 1 Million Wörtern senden Wurde während der Übertragung manipuliert? Es wäre nicht gut, wenn jemand den Inhalt der Datei auf halbem Weg abschneiden und manipulieren würde. Egal wie groß die Datei ist, sie wird es tun Holen Sie sich eine Zeichenfolge mit fester Länge, normalerweise 32 Bit. Zu diesem Zeitpunkt verschlüsselt A zuerst die Datei und erhält eine Zeichenfolge mit Passwörtern. Die Datei wird übrigens auch an B übergeben. Wenn B die Datei empfängt, verschlüsselt er sie ebenfalls Überprüfen Sie die Datei mit MD5, um zu sehen, ob der erhaltene Chiffretext mit dem von A gesendeten übereinstimmt. Wenn er konsistent ist, bedeutet dies, dass die Datei sicher ist.

Tatsächlich, wenn wir Laden Sie Dateien aus dem Internet herunter. Manchmal befindet sich hinter der heruntergeladenen Datei ein MD5-Chiffretext, z. B. MD5 (e8027a87676ea48b3a3c9b0a4d8d87a0), der den gleichen Effekt wie oben hat (glaube ich ...).

MD5 ist ein öffentlicher irreversibler Algorithmus, was bedeutet, dass es keine Möglichkeit gibt, den Chiffretext direkt zu knacken, um die Quelldateninformationen zu erhalten. MD5 kann die Datei beliebiger Größe einzeln verschlüsseln und eine eindeutige 32-Bit-Zeichenfolge 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

Paket com.wang.encryption

importieren com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.security.MessageDigest;
/* *
* @Autor yogo.wang
* @Datum 04.11.2016-13:02 Uhr
*/
public class MD5Test {
public static String md5Encode(String msg) throws Exception{


}

Kopieren Sie den Code
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);
}
Führen Sie den Code aus und erhalten Sie die Ausgabeergebnisse wie folgt:


fc5e038d38a57032085441e7fe7010b0
fc5e038d38a57032085441e7fe7010b0

Es ist ersichtlich, dass der erhaltene Chiffretext immer derselbe ist. Werfen wir einen Blick auf die Prinzipien und Anwendungen von MD5 MD5-Implementierungsprinzipien und -Anwendungen
Ich habe einige MD5-Verschlüsselungscodes gelesen, die von einigen Freunden im Internet implementiert wurden. Ich kann nur sagen, dass ich sie ein wenig verstehe. Ich werde sie hier veröffentlichen und einige Implementierungsschritte im Internet vorstellen. Schauen Sie sich das an.

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

 1) Füllen: Füllen Sie zuerst die Länge (Bit) der Eingabeinformationen, sodass 512 The Der Rest beträgt 448. 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 standardmäßige magische Zahlen: Die standardmäßigen magischen Zahlen sind (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 beschreibt MessageDigest wie folgt öffentliche abstrakte Klasse MessageDigest

MessageDigest md = MessageDigest.getInstance("SHA");

try {

} Catch (CloneNotSupportedException cnse) {
extends MessageDigestSpi
  此 MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,输出固定长度的哈希值。
  MessageDigest 对象开始被初始化。该对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。
  对于给定数量的更新数据,digest 方法只能被调用一次。digest 被调用后,MessageDigest 对象被重新设置成其初始状态。
  实现可随意选择是否实现 Cloneable 接口。客户端应用程可以通过尝试复制和捕获 CloneNotSupportedException 测试可复制性:

}

Beachten Sie, dass es dennoch möglich ist, Zwischen-Digests durch Instanziierung mehrerer Instanzen zu berechnen, wenn eine bestimmte Implementierung nicht replizierbar ist und die Anzahl der Digests im Voraus bekannt ist.
md.update(toChapter1);
 MessageDigest tc1 = md.clone();
 byte[] toChapter1Digest = tc1.digest();
 md.update(toChapter2);
 ...etc.

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

throw new DigestException("couldn&#39;t make digest of partial content");
Die Anwendungsbereiche von MD5 können hauptsächlich in die folgenden Kategorien unterteilt werden:

1. Wenn ich beispielsweise Datei-Downloads anbiete, kann ich die aus den Installationsdateien erhaltenen MD5-Ausgabeergebnisse veröffentlichen, um zu verhindern, dass Kriminelle Trojaner zum Installationsprogramm hinzufügen die Website.

2. Verhindern Sie die direkte Anzeige von Klartext (Passwortverschlüsselung). Heutzutage speichern viele Websites den MD5-Wert des Benutzerpassworts, wenn das Benutzerpasswort in der Datenbank gespeichert wird. Selbst wenn Kriminelle den MD5-Wert des Benutzerkennworts in der Datenbank erhalten, können sie auf diese Weise 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 Ihre relevanten Informationen eingebe, erraten Sie das Passwörter, die Sie verwenden können, und sie dann alle mit MD5 verschlüsseln, um viel Chiffretext zu erhalten, und dann den Chiffretext Ihres Passworts zu erhalten und ihn einzeln mit meiner Chiffretext-Bibliothek zu vergleichen. Wenn der Chiffretext übereinstimmt, wird Ihr Passwort selbst sein selbstzerstörerisch.


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