首頁 >常見問題 >md5加密演算法

md5加密演算法

(*-*)浩
(*-*)浩原創
2019-09-02 09:18:307181瀏覽

什麼是MD5演算法

MD5資訊摘要演算法(英文:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函數,可以產生一個128位元(16位元組)的雜湊值(hash value),用於確保訊息傳輸完整一致。

md5加密演算法

MD5功能(推薦學習:web前端影片教學

輸入任意長度的信息,經過處理,輸出為128位的信息(數字指紋); 

不同的輸入得到的不同的結果(唯一性);

MD5屬不屬於加密演算法

認為不屬於的人是因為他們覺得不能從密文(雜湊值)反過來得到原文,也就是沒有解密演算法,所以這部分人認為MD5只能屬於演算法,不能稱為加密演算法; 

認為屬於的人是因為他們覺得經過MD5處理後看不到原文,也就是已經將原文加密,所以認為MD5屬於加密演算法;我個人支持前者,如同認為BASE64演算法只能算編碼。

MD5演算法是否可逆?

MD5不可逆的原因是其是一種雜湊函數,使用的是hash演算法,在計算過程中原文的部分資訊是遺失了的。

不過有個地方值得指出的是,一個MD5理論上的確是可能對應無數多個原文的,因為MD5是有限多個的而原文可以是無數多個。例如主流使用的MD5將任意長度的「位元組字串映射為一個128bit的大整數。

#也就是一共有2^128種可能,大概是3.4*10^38,這個數字是有限多個的,而但是世界上可以被用來加密的原文則會有無數的可能性。

不過需要注意的一點是,盡量這是一個理論上的有限對無限,不過問題是這個無限在現實生活中並不完全成立,因為一方面現實中原文的長度往往是有限的(以常用的密碼為例,一般人都在20位以內),另一方面目前想要發現兩段原文對應同一個MD5(專業的說這叫做雜湊衝撞)值非常困難,因此某種意義上來說,在一定範圍內想構建MD5值與原文的一一對應關係是完全有可能的。所以對於MD5目前最有效的攻擊方式就是彩虹表,具體詳情你可以透過Google了解。

MD5相當於超損壓縮。

##MD5用途

1.防止被篡改: 

1)例如發送一個電子文檔,發送前,我先得到MD5的輸出結果a。然後在對方收到電子文檔後,對方也得到一個MD5的輸出結果b.如果a與b一樣就代表中途未被篡改。 

2)例如我提供文件下載,為了防止不法分子在安裝程序中添加木馬,我可以在網站上公佈由安裝文件所得的MD5輸出結果。 

3)SVN在偵測檔案是否在CheckOut後被修改過,也是用到了MD5.

2.防止直接看到明文: 

#現在很多網站在資料庫儲存使用者的密碼的時候都是儲存使用者密碼的MD5值。這樣就算不法分子得到資料庫的使用者密碼的MD5值,也無法知道使用者的密碼。(例如在UNIX系統中使用者的密碼就是以MD5(或其它類似的演算法)經過加密後儲存在檔案系統中。

當使用者登入的時候,系統把使用者輸入的密碼計算成MD5值,然後再去和儲存在檔案系統中的MD5值進行比較,進而確定輸入的密碼是否正確。

透過這樣的步驟,系統在不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性。這不但可以避免使用者的密碼被具有系統管理員權限的使用者知道,而且還在一定程度上增加了密碼被破解的難度。)

3.防止抵賴(數位簽章): 

#這需要一個第三方認證機構。例如A寫了一個文件,認證機構對此文件用MD5演算法產生摘要資訊並做好記錄。

若以後A說這文件不是他寫的,權威機構只需對此文件重新產生摘要信息,然後跟記錄在冊的摘要信息進行比對,相同的話,就證明是A寫的了。這就是所謂的「數位簽章」。

MD5安全性

普遍認為MD5是很安全,因為暴力破解的時間是一般人無法接受的。實際上如果把用戶的密碼MD5處理後再儲存到資料庫,其實是很不安全的。

因為使用者的密碼是比較短的,而且很多使用者的密碼都使用生日,手機號碼,身分證號碼,電話號碼等等。或使用常用的一些吉利的數字,或是某個英文單字。如果我把常用的密碼先MD5處理,把資料存起來,然後再跟你的MD5結果匹配,這時我就有可能得到明文。

例如某個MD5破解網站http://www.cmd5.com/default.aspx,所以現在大多數網站密碼的策略是強制要求使用者使用數字大小寫字母的組合的方式來提高使用者密碼的安全度。

以上是md5加密演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn