1. 程式人生 > >密碼學摘要演算法之MD5

密碼學摘要演算法之MD5

密碼學摘要演算法之MD5

摘要演算法

摘要演算法是一種能產生特殊輸出格式的演算法,這種演算法的特點是:無論使用者輸入什麼長度的原始資料,經過計算後輸出的密文都是固定長度的,這種演算法的原理是根據一定的運算規則對原資料進行某種形式的提取,這種提取就是摘要,被摘要的資料內容與原資料有密切 聯絡,只要原資料稍有改變,輸出的“摘要”便完全不同,因此,基於這種原理的演算法便能對 資料完整性提供較為健全的保障。但是,由於輸出的密文是提取原資料經過處理的定長值,所以它已經不能還原為原資料,即訊息摘要演算法是不可逆的,理論上無法通過反向運算取得 原資料內容,因此它通常只能被用來做資料完整性驗證。

如今常用的“訊息摘要”演算法經歷了多年驗證發展而保留下來的演算法已經不多,這其中包 括 MD2、MD4、MD5、SHA、SHA-1/256/383/512 等。
常用的摘要演算法主要有 MD5 和 SHA1。D5 的輸出結果為 16 位元組,sha1 的輸出結果為 20 位元組

MD5

MD5(單向雜湊演算法)的全稱是Message-Digest Algorithm 5(資訊-摘要演算法),經MD2、MD3和MD4發展而來。

原理

MD5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值

特點

  1. 輸入任意長度的資訊,經過處理,暑促為128位的資訊(數字指紋)
  2. 不同的輸入得到不同的結果(唯一性)
  3. 根據128位輸出的結果不可能反推出輸入的資訊(不可逆)

用途

防止被篡改,一致性檢驗

  • 比如傳送一個電子文件,傳送前,我先得到MD5的輸出結果a。然後在對方收到電子文件後,對方也得到一個MD5的輸出結果b。如果a與b一樣就代表中途未被篡改
  • 比如我提供檔案下載,為了防止不法分子在安裝程式中新增木馬,我可以在網站上公佈由安裝檔案得到的MD5輸出結果
  • SVN在檢測檔案是否在CheckOut後被修改過,也是用到了MD5.

數字簽名(防止抵賴或者說版權)

  • 這需要一個第三方認證機構。例如A寫了一個檔案,認證機構對此檔案用MD5演算法產生摘要資訊並做好記錄。若以後A說這檔案不是他寫的,權威機構只需對此檔案重新產生摘要資訊,然後跟記錄在冊的摘要資訊進行比對,相同的話,就證明是A寫的了。這就是所謂的“數字簽名”。

舉例:

  • 比如下載伺服器針對一個檔案預先提供一個MD5值,使用者下載完該檔案後,用我這個演算法重新計算下載檔案的MD5值,通過比較這兩個值是否相同,就能判斷下載的檔案是否出錯,或者說下載的檔案是否被篡改了
  • 比如一張圖片,在這裡插入圖片描述這張是正版,那我開啟圖片擷取一張圖樣的圖片,肉眼看上去是一樣的,但怎麼區分誰是正版誰是盜版呢,其實就是把正版圖片進行加密,交給第三方認證機構,以固定其為原版 在這裡插入圖片描述

安全訪問認證

在Unix系統中使用者的密碼是以MD5(或其它類似的演算法)經Hash運算後儲存在檔案系統中。當用戶登入的時候,系統把使用者輸入的密碼進行MD5 Hash運算,然後再去和儲存在檔案系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性

搜尋引擎

比如百度搜索輸入cto51和51cto得到的結果是一樣的,百度是怎麼知道兩者是一樣的呢,其實是把’51’和’cto’進行MD5加密後按位運算,如果結果一致,則搜尋結果相同在這裡插入圖片描述

百度雲||360上傳的秒傳功能

原理:只要伺服器上有上傳的檔案,對比檔案的MD5值,實現秒傳

視訊封殺

如何封殺:找MD5值,找到所有這個值對應的檔案
逃避:
(1)壓縮一下,使其MD5值發生改變
在這裡插入圖片描述
可以看到和之前對1.jpg這張圖片本身進行MD5加密的值完全不同
(2)對檔案進行base64編碼
在這裡插入圖片描述
從上可以看出base64編碼後的檔案 MD5值與原檔案完全不一樣,百度雲搜尋不到,而你下載完成後的檔案再解碼還原檔案,其MD5值未方式改變

提升MD5加密安全性

  • 加’鹽’:實質上就是把所有儲存的密碼拼接一段固定的字串然後進行加密,字串儘可能的複雜,已增強破解難度. 破解平臺
  • HMAC:給定一個"祕鑰",對明文進行加密,並且做"兩次雜湊"!-> 得到的結果,還是32個字元(後面再詳細介紹)