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