MD5介紹

weixin_33782386發表於2018-08-20

md5介紹

1. md5簡介

md5的全稱是md5資訊摘要演算法(英文:MD5 Message-Digest Algorithm ),一種被廣泛使用的密碼雜湊函式,可以產生一個128位(16位元組,1位元組8位)的雜湊值(常見的是用32位的16進製表示,比如:0caa3b23b8da53f9e4e041d95dc8fa2c),用於確保資訊傳輸的完整一致。

2. md5原理

md5將整個檔案當做一個大文字資訊,通過不可逆的字串變換演算法,產生一個唯一的MD5資訊摘要。檔案的md5類似於人的指紋,在世界上是獨立無二的,如果任何人對檔案做了任何改動,其md5的值也就是對應的“數字指紋”都會發生變化。

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

md5與對稱和非對稱加密演算法不同,這兩種密碼是防止資訊被竊取,而摘要演算法的目標是用於證明原文的完整性。

3. md5特性

1. 不可逆

沒有系統有辦法知道md5原來的文字是什麼。

2. 具有高度的離散性

md5碼具有高度的雜湊性,沒有規律可循,哪怕原資訊只有一點點的變化,比如多個空格,那麼就會導致md5發生巨大變化,也可以說產生的md5碼是不可預測的。

3. 壓縮性

任意長度的資料,算出的md5值得長度都是固定的。

4. 弱碰撞性

已知原資料和其md5的值,想找到一個具有相同md5值得資料(即偽造資料)是非常困難的。

4. md5的用途

  • 密碼的加密儲存,使用者設定密碼時,服務端只記錄這個密碼的MD5,而不記錄密碼本身,以後驗證使用者身份時,只需要將使用者輸入的密碼再次做一下MD5後,與記錄的MD5作一個比較即可驗證其密碼的合法性。
  • 數字簽名,比如釋出一個程式,為了防止別人在你的程式裡插入病毒或木馬,你可以在釋出這個程式的同時,公開這個程式檔案的MD5碼,這樣別人只需要在任何地方下載這個程式後做一次MD5,然後跟公開的這個MD5作一個比較就知道這個程式是否被第三方修改過。
  • 檔案完整性驗證,比如當下載一個檔案時,伺服器返回的資訊中包括這個檔案的md5,在本地下載完畢時進行md5,將兩個md5值進行比較,如果一致則說明檔案完整沒有丟包現象。
  • 檔案上傳,比如百度雲實現的秒傳,就是對比你上傳的檔案md5在百度伺服器是否已經存在了。

5. 一些疑問

1. 同一個檔案用不同的語言計算出來的md5一樣嗎?

只要演算法正確,都是一樣的。

2. 拷貝的檔案md5會改變嗎?

不會。

3. 還有什麼其他的摘要演算法麼?

除了MD5,還有更安全的SHA-1,SHA-2(包括SHA-224、SHA-256、SHA-384,和SHA-512 ),SHA-3,RIPEMD-160等雜湊加密演算法

參考:

關於王小云破解MD5之我見 :https://blog.csdn.net/raptor/article/details/97270

MD5作用有哪些:https://blog.csdn.net/jike_yangyujing/article/details/80512205

MD5演算法原理及其實現:https://blog.csdn.net/u012611878/article/details/54000607