三分鐘學習 MD5

我們在網上下載軟體的時候,上面經常會附加一個 MD5 值。那麼這個 MD5 是什麼呢?又起到什麼作用呢?

一起跟我來看看吧。

1. MD5 是什麼

全稱為 消息摘要演算法版本5 (Message Digest Algorithm 5)

它是一種 Hash 演算法。

作用是為了信息安全。

再具體點,MD5 值就是一串 128 bit 的數據。

MD5 的核心是通過演算法把任意長度的原始數據映射成128 bit 的數據。這一點跟CRC 類似,都是把一串數據經過處理,得到另一個固定長度的數據。(所以講完 CRC,我要講 MD5, 因為它們兩個在實際中經常會出現和用到。)

MD5 的特點:

不可逆性 --- 根據 MD5 值計算不出原始數據

唯一性 --- 不同原始數據會有不同的 MD5 值 (不完全可靠,後面說)

MD5 到底算不算加密演算法?仁者見仁智者見智吧。說它是加密,因為它確實把原始數據,比如用戶密碼,變成了一般人看不懂的 MD5 值;說它不是加密,因為它不能解密。

據說 Linux 系統中,用戶密碼,都是以 MD5 形式存在文件中的,這樣你在輸入密碼的時候,計算機只要計算你輸入密碼的 MD5 再跟計算機文件中存儲的 MD5 進行比對就行了。

2. MD5 演算法

第一步:數據填充。填充後數據長度為 512 bit 的整數倍。

第二步: 循環計算。每 512 bit 作為一組,前一個分組得到的 MD5 作為下一個 分組的狀態輸入 (看作就是ABCD 吧,代表 4 個 32 bit)。最終的ABCD 就是128 bit 的 MD5。

具體的計算過程比較複雜,這裡不細說了,說多了大家看起來比較吃力。上面兩幅圖已經說明了大體的流程。

3. Hash 碰撞

Hash 碰撞是指兩份不同的原始數據,得到相同的 MD5 值。

我前面已經提到,MD5 是具有唯一性的,其實---這個唯一性是有限的,有概率的。

MD5 之所以應用這麼廣泛,就是因為它的可靠性,很難有兩個不同的輸入,得到相同的 MD5。但是!!!雖然概率低 (具體有多大概率,我還沒研究清楚),但是確實有。

2004 年山東大學的王曉雲就破解了 MD5, 找到了 Hash 碰撞。

其實,Hash 碰撞還是小概率事件了,要不然為何如今儘管已經有人破解了 MD5, 但它還是被大家屁顛屁顛的用著呢?

歡迎關注我的微信公眾號:紅猴子

這是一個工科生漲知識的號,公眾號的內容有CSEE技術, 職場以及經驗談,知乎專欄文章會首發於我的微信公眾號,希望能給迷茫和困惑中的朋友一些啟發與幫助,歡迎圍觀

推薦閱讀:

關於密碼中的RSA演算法和ecc(橢圓曲線)演算法加密過程是怎樣的?
如何用通俗易懂的語言解釋base64?
早期的中國黑客大牛們現在都在幹什麼呢?
為什麼正版光碟無法完全複製?
加密手機真的需要加密晶元嗎?

TAG:加密 | 校验码 | 计算机科学 |