MD5(單向散列算法):全稱是Message-Digest Algorithm 5(信息-摘要算法)领舰,經(jīng)MD2绷旗、MD3和MD4發(fā)展而來委煤。MD5算法的使用不需要支付任何版權費用康铭,而MD5屬不屬于加密算法蹋宦,卻還是稍有爭議的披粟,認為不屬于的人是因為他們覺得不能從密文(散列值)反過來得到原文,即沒有解密算法冷冗,所以這部分人認為MD5只能屬于算法守屉,不能稱為加密算法,認為屬于的人是因為他們覺得經(jīng)過MD5處理后看不到原文蒿辙,即已經(jīng)將原文加密拇泛,所以認為MD5屬于加密算法滨巴。
MD5功能:
1.)輸入任意長度的信息,經(jīng)過處理俺叭,輸出為128位的信息(數(shù)字指紋)恭取;
2.)不同的輸入得到的不同的結果(唯一性);
3.)根據(jù)128位的輸出結果不可能反推出輸入的信息(不可逆)绪颖;
MD5用途:
1.)防止被篡改秽荤,比如發(fā)送一個電子文檔,發(fā)送前柠横,我先得到MD5的輸出結果a窃款。然后在對方收到電子文檔后,對方也得到一個MD5的輸出結果b牍氛。如果a與b一樣就代表中途未被篡改晨继。2)比如我提供文件下載,為了防止不法分子在安裝程序中添加木馬搬俊,我可以在網(wǎng)站上公布由安裝文件得到的MD5輸出結果紊扬。3)SVN在檢測文件是否在CheckOut后被修改過,也是用到了MD5唉擂。
2.)防止直接看到明文餐屎,現(xiàn)在很多網(wǎng)站在數(shù)據(jù)庫存儲用戶的密碼的時候都是存儲用戶密碼的MD5值。這樣就算不法分子得到數(shù)據(jù)庫的用戶密碼的MD5值玩祟,也無法知道用戶的密碼(其實這樣是不安全的腹缩,后面我會提到)。(比如在UNIX系統(tǒng)中用戶的密碼就是以MD5(或其它類似的算法)經(jīng)加密后存儲在文件系統(tǒng)中空扎。當用戶登錄的時候藏鹊,系統(tǒng)把用戶輸入的密碼計算成MD5值,然后再去和保存在文件系統(tǒng)中的MD5值進行比較转锈,進而確定輸入的密碼是否正確盘寡。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性撮慨。這不但可以避免用戶的密碼被具有系統(tǒng)管理員權限的用戶知道竿痰,而且還在一定程度上增加了密碼被破解的難度。
3.)防止抵賴(數(shù)字簽名),這需要一個第三方認證機構甫煞。例如A寫了一個文件菇曲,認證機構對此文件用MD5算法產(chǎn)生摘要信息并做好記錄。若以后A說這文件不是他寫的抚吠,權威機構只需對此文件重新產(chǎn)生摘要信息常潮,然后跟記錄在冊的摘要信息進行比對,相同的話楷力,就證明是A寫的了喊式。這就是所謂的“數(shù)字簽名”孵户。
MD5算法過程:
1.)填充:如果輸入信息的長度(bit)對512求余的結果不等于448,就需要填充使得對512求余的結果等于448岔留。填充的方法是填充一個1和n個0夏哭。填充完后,信息的長度就為N512+448(bit)献联;
2.)記錄信息長度:用64位來存儲填充前信息長度竖配。這64位加在第一步結果的后面,這樣信息長度就變?yōu)镹512+448+64=(N+1)*512位.
3.)裝入標準的幻數(shù)(四個整數(shù)):標準的幻數(shù)(物理順序)是(A=(01234567)16里逆,B=(89ABCDEF)16进胯,C=(FEDCBA98)16,D=(76543210)16)原押。如果在程序中定義應該是(A=0X67452301L胁镐,B=0XEFCDAB89L,C=0X98BADCFEL诸衔,D=0X10325476L).
4.)四輪循環(huán)運算:循環(huán)的次數(shù)是分組的個數(shù)(N+1).
經(jīng)過網(wǎng)上相關資料的翻閱盯漂,找到了相關的代碼,有興趣的盆友可以在下方留下E-mail笨农;