簡述MD5信息摘要算法

在之前的文章中,我們聊了不少的加密算法,今天我們聊一種被廣泛使用的密碼散列函數(shù)——MD5。

MD5

MD5又叫MD5信息摘要算法,經(jīng)常用于確保信息傳輸?shù)耐暾院鸵恢滦?。從嚴格意義上來說,MD5并不是加密算法,只能是一種哈希算法或是叫做摘要算法。MD5算法對比普通的加密算法缺少了解密的過程,它無法從密文(散列值)反過來得到原文。

MD5應(yīng)用場景

  • 用戶密碼保護

在保存用戶密碼時,不記錄密碼本身,只記錄密碼的MD5結(jié)果(即使數(shù)據(jù)庫被盜也無法反推出明文)。

密碼保護
圖片來源于網(wǎng)絡(luò)
  • 文件完整性校驗

先在發(fā)送端計算一次文件的MD5,并把結(jié)果發(fā)送給接收端,接收端在接受文件后也計算一次MD5,兩次結(jié)果一致文件完整。

  • 垃圾郵件篩選

在電子郵件使用越來越普遍的情況下,可以利用 MD5 算法在郵件接收服務(wù)器上進行垃圾郵件的篩選,以減少此類郵件的干擾。

MD5應(yīng)用
圖片來源于網(wǎng)絡(luò)
  • 數(shù)字簽名

發(fā)布程序時同時發(fā)布其MD5,下載后比較MD5是否相同,就可知道程序是否被篡改。

MD5算法原理

MG5以512位分組來處理輸入的信息,每一分組又被劃分為16個32位子分組。經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。

在MD5算法中,首先需要對信息進行填充,填充方法如下:先在信息后面填充一個1,之后就是無數(shù)個0,直到使其字節(jié)長度對512求余數(shù)的結(jié)果等于448,即(n*512) + 448 ,為什么要使余數(shù)為448呢,因為剩下的512-448 等于64位 是用于表示填充前的信息長度。加上剩下的64位,即(n+1)*512,長度剛剛好是512的整數(shù)倍數(shù)。

然后就與鏈接變量進行循環(huán)運算,得出結(jié)果。MD5中有四個32位被稱作鏈接變量(Chaining Variable)的整數(shù)參數(shù),它們分別為:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。當設(shè)置好這四個鏈接變量后,就開始進入算法的四輪循環(huán)運算。

MD5算法原理
圖片來源于網(wǎng)絡(luò)

MD5的特點

  1. 壓縮性:無論數(shù)據(jù)長度是多少,計算出來的MD5值長度相同。
  2. 容易計算性:由原數(shù)據(jù)容易計算出MD5值。
  3. 抗修改性:即便修改一個字節(jié),計算出來的MD5值也會巨大差異。
  4. 抗碰撞性:知道數(shù)據(jù)和MD5值,很小概率找到相同MD5值相同的原數(shù)據(jù)。
MD5
圖片來源于網(wǎng)絡(luò)

MD5雖然理論上不可逆,但還是可以通過“查字典”的方式獲取MD5原文信息,并且因為MD5的碰撞性,決定了存在兩個不同的輸入信息,其MD5相同的可能,因此不適用于安全性認證。

免責聲明:素材源于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系刪稿。