1)背景介紹:
什么是MD5?
MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計,于1992年公開,用以取代MD4算法。
密碼散列函數(shù)(Cryptographic hash function),又譯為加密散列函數(shù),是散列函數(shù)的一種。
MD4算法在安全上有大的漏洞,但它對在其后才被開發(fā)出來的好幾種信息安全加密算法的出現(xiàn)卻有著不可忽視的引導作用,比如MD5加密算法.
(2)知識剖析:
主要應用:
2.1一致性驗證
MD5的典型應用是對一段信息(Message)產(chǎn)生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多軟件在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結(jié)構(gòu)如:
MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515
MD5將整個文件當作一個大文本信息,通過其不可逆的字符串變換算法,產(chǎn)生了這個唯一的MD5信息摘要。
舉例描述:
我們常常在某些軟件下載站點的某軟件信息中看到其MD5值,它的作用就在于我們可以在下載該軟件后,對下載回來的文件用專門的軟件(如windows MD5 Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。
具體來說文件的MD5值就像是這個文件的“數(shù)字指紋”。每個文件的MD5值是不同的,如果任何人對文件做了任何改動,其MD5值也就是對應的“數(shù)字指紋”就會發(fā)生變化。比如下載服務器針對一個文件預先提供一個MD5值,用戶下載完該文件后,用我這個算法重新計算下載文件的MD5值,通過比較這兩個值是否相同,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。
利用MD5算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數(shù)據(jù)庫、系統(tǒng)文件安全等方面。
2.2數(shù)字簽名
MD5的典型應用是對一段Message(字節(jié)串)產(chǎn)生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,并對這個readme.txt產(chǎn)生一個MD5的值并記錄在案,然后你可以傳播這個文件給別人,別人如果修改了文件中的任何內(nèi)容,你對這個文件重新計算MD5時就會發(fā)現(xiàn)(兩個MD5值不相同)。如果再有一個第三方的認證機構(gòu),用MD5還可以防止文件作者的“抵賴”,這就是所謂的數(shù)字簽名應用。
2.3安全訪問認證
MD5還廣泛用于操作系統(tǒng)的登陸認證上,如Unix、各類BSD系統(tǒng)登錄密碼、數(shù)字簽名等諸多方面。如在Unix系統(tǒng)中用戶的密碼是以MD5(或其它類似的算法)經(jīng)Hash運算后存儲在文件系統(tǒng)中。當用戶登錄的時候,系統(tǒng)把用戶輸入的密碼進行MD5 Hash運算,然后再去和保存在文件系統(tǒng)中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道。
2.4算法原理
對MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值
(3)常見問題:
(4)解決方案:
(5)編碼實戰(zhàn):
@Test
public void MD5Test(){
String password = “!ytd1129097428”;
String md1 = MD5Util.MD5(password);
String md2 = MD5Util.generate(password);
System.out.println(“加密前:”+password);
System.out.println(“普通MD5加密后:”+md1);
System.out.println(“加鹽MD5加密后:”+md2);
System.out.println(“比較原文和加鹽MD5加密之后是否一致:”+MD5Util.verify(password,md2));
}
輸出結(jié)果:
加密前:!ytd1129097428
普通MD5加密后:add4ff4fb01ace59713390dc5876d5d0
加鹽MD5加密后:96b911880466d91d3244f37bd56c4531967c28d65181f191
比較原文和加鹽MD5加密之后是否一致:true
(6)拓展思考:
關(guān)于撞庫破解:
這是概率極低的破解方法,原理就是:
1.建立一個大型的數(shù)據(jù)庫,把日常的各個語句,通過MD5加密成為密文,不斷的積累大量的句子,放在一個龐大的數(shù)據(jù)庫里.
2.比如一個人拿到了別人的密文,想去查詢真實的密碼,就需要那這個密文去到提供這個數(shù)據(jù)庫的公司網(wǎng)站去查詢.
在線MD5解密: http://www.cmd5.com/
(7)參考文獻:
https://www.zhihu.com/question/22651987
https://blog.csdn.net/dingsai88/article/details/51637977
https://baike.baidu.com/item/MD5
(8)更多討論:
Q1:1.MD5碼不是128位的嗎?為何得出來的亂碼有的是32位的?
A1:128位是指二進制位。二進制太長,所以一般都改寫成16進制,每一位16進制數(shù)可以代替4位二進制數(shù),所以128位二進制數(shù)寫成16進制就變成了128/4=32位。
Q2:2.MD5特點是什么?
A2:1.長度固定:
不管多長的字符串,加密后長度都是一樣長
作用:方便平時信息的統(tǒng)計和管理
2.易計算:
字符串和文件加密的過程是容易的.
作用: 開發(fā)者很容易理解和做出加密工具
3.細微性:
一個文件,不管多大,小到幾k,大到幾G,你只要改變里面某個字符,那么都會導致MD5值改變.
作用:很多軟件和應用在網(wǎng)站提供下載資源,其中包含了對文件的MD5碼,用戶下載后只需要用工具測一下下載好的文件,通過對比就知道該文件是否有過更改變動.
4.不可逆性:
你明明知道密文和加密方式,你卻無法反向計算出原密碼.
作用:基于這個特點,很多安全的加密方式都是用到.大大提高了數(shù)據(jù)的安全性
Q3:3.什么是MD5加鹽?
A3:比如我的銀行密碼是”12345”
1.得到的MD5是:827ccb0eea8a706c4c34a16891f84e7b
2.一個人截取到這個密文,那么通過撞庫肯定容易撞出12345.
3.我們要做的就是加鹽,銀行密碼還是”12345”,然后我把銀行密碼加上我特定的字符串才計算MD5 所以密碼還是那個密碼,但是變成求”12345密碼加密987”的MD5值,然后再得到MD5,那么這個MD5起碼可以確認那個數(shù)據(jù)庫不會有.