MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),壹種被廣泛使用的密碼散列函數,可以產生出壹個128位(16字節)的散列值(hash value),用於確保信息傳輸完整壹致。
對MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每壹分組又被劃分為16個32位子分組,經過了壹系列的處理後,算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成壹個128位散列值。
1991年,Rivest開發出技術上更為趨近成熟的md5算法。它在MD4的基礎上增加了"安全-帶子"(safety-belts)的概念。雖然MD5比MD4復雜度大壹些,但卻更為安全。
這個算法很明顯的由四個和MD4設計有少許不同的步驟組成。在MD5算法中,信息-摘要的大小和填充的必要條件MD4完全相同。Den boer和Bosselaers曾發現MD5算法中的假沖突(pseudo-collisions),但除此之外就沒有其他被發現的加密後結果了。
擴展資料
MD5應用
MD5的典型應用是對壹段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多軟件在下載的時候都有壹個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有壹行文本,大致結構如:
MD5 (tanajiya.tar.gz) =38b8c2c1093dd0fec383a9d9ac940515
這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作壹個大文本信息,通過其不可逆的字符串變換算法,產生了這個唯壹的MD5信息摘要。為了讓讀者朋友對MD5的應用有個直觀的認識,筆者以壹個比方和壹個實例來簡要描述壹下其工作過程:
大家都知道,地球上任何人都有自己獨壹無二的指紋,這常常成為司法機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生壹個同樣獨壹無二的“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。
我們常常在某些軟件下載站點的某軟件信息中看到其MD5值,它的作用就在於我們可以在下載該軟件後,對下載回來的文件用專門的軟件(如Windows MD5 Check等)做壹次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同壹文件。
具體來說文件的MD5值就像是這個文件的“數字指紋”。每個文件的MD5值是不同的,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”就會發生變化。比如下載服務器針對壹個文件預先提供壹個MD5值,用戶下載完該文件後,用我這個算法重新計算下載文件的MD5值,通
過比較這兩個值是否相同,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。MD5實際上壹種有損壓縮技術,壓縮前文件壹樣MD5值壹定壹樣,反之MD5值壹樣並不能保證壓縮前的數據是壹樣的。在密碼學上發生這樣的概率是很小的,所以MD5在密碼加密領域有壹席之地。
但是專業的黑客甚至普通黑客也可以利用MD5值實際是有損壓縮技術這壹原理,將MD5的逆運算的值作為壹張表俗稱彩虹表的散列表來破解密碼。利用MD5算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系統文件安全等方面。
參考資料百度百科——MD5