========以下是百度對MD5的解釋====================================
MD5簡介
md5的全稱是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest開發出來,經md2、md3和md4發展而來。它的作用是讓大容量信息在用數字簽名軟件簽署私人密匙前被"壓縮"成壹種保密的格式(就是把壹個任意長度的字節串變換成壹定長的大整數)。不管是md2、md4還是md5,它們都需要獲得壹個隨機長度的信息並產生壹個128位的信息摘要。雖然這些算法的結構或多或少有些相似,但md2的設計與md4和md5完全不同,那是因為md2是為8位機器做過設計優化的,而md4和md5卻是面向32位的電腦。這三個算法的描述和c語言源代碼在internet rfcs 1321中有詳細的描述(/ 是為了公開征集專門針對MD5的攻擊而設立的,網站於2004年8月17日宣布:“中國研究人員發現了完整MD5算法的碰撞;Wang, Feng, Lai與Yu公布了MD5、MD4、HAVAL-128、RIPEMD-128幾個 Hash函數的碰撞。這是近年來密碼學領域最具實質性的研究進展。使用他們的技術,在數個小時內就可以找到MD5碰撞。……由於這個裏程碑式的發現,MD5CRK項目將在隨後48小時內結束”。
MD5用的是哈希函數,在計算機網絡中應用較多的不可逆加密算法有RSA公司發明的MD5算法和由美國國家技術標準研究所建議的安全散列算法SHA.
算法的應用
MD5的典型應用是對壹段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟件在下載的時候都有壹個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有壹行文本,大致結構如:
MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作壹個大文本信息,通過其不可逆的字符串變換算法,產生了這個唯壹的MD5信息摘要。為了讓讀者朋友對MD5的應用有個直觀的認識,筆者以壹個比方和壹個實例來簡要描述壹下其工作過程:
大家都知道,地球上任何人都有自己獨壹無二的指紋,這常常成為公安機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生壹個同樣獨壹無二的“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。
我們常常在某些軟件下載站點的某軟件信息中看到其MD5值,它的作用就在於我們可以在下載該軟件後,對下載回來的文件用專門的軟件(如Windows MD5 Check等)做壹次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同壹文件。利用MD5算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系統文件安全等方面。
MD5的典型應用是對壹段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,妳將壹段話寫在壹個叫 readme.txt文件中,並對這個readme.txt產生壹個MD5的值並記錄在案,然後妳可以傳播這個文件給別人,別人如果修改了文件中的任何內容,妳對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。如果再有壹個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。
所以,要遇到了md5密碼的問題,比較好的辦法是:妳可以用這個系統中的md5()函數重新設壹個密碼,如admin,把生成的壹串密碼覆蓋原來的就行了。
MD5還廣泛用於加密解密技術上,如Unix、各類BSD系統登錄密碼(在MD5誕生前采用的是DES加密算法,後因MD5安全性更高,DES被淘汰)、通信信息加密(如大家熟悉的即時通信軟件MyIM)、數字簽名等諸多方。比如在UNIX系統中用戶的密碼就是以MD5(或其它類似的算法)經加密後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在壹定程度上增加了密碼被破解的難度。MD5將任意長度的“字節串”變換成壹個128bit的大整數,並且它是壹個不可逆的字符串變換算法,換句話說就是,即使妳看到源程序和算法描述,也無法將壹個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。所以,要遇到了md5密碼的問題,比較好的辦法是:妳可以用這個系統中的md5()函數重新設壹個密碼,如admin,把生成的壹串密碼覆蓋原來的就行了。