好比一些提供下載的網站,在頁面上除了壓縮包的下載地址還提供了對應的MD5值。 咱們下載該壓縮包後能夠查看壓縮包的MD5值。 對比下載的壓縮包MD5值和網站提供的MD5值,若是兩個MD5值不一致,那麼說明該壓縮包不是官方提供的那個壓縮包,可能被替換成其餘文件或被修改過。好比蘋果開發工具的XCodeGhost事件。算法
MD5算法就是一種常見的摘要算法。該算法能夠生成壓縮包的一個128 bit 的二進制串。除了壓縮包,也能夠應用於其餘文件和字符串。好比數據庫中不會直接存儲帳號密碼,好比我就習慣將 密碼拼接一個無規律的字符串 而後計算出MD5摘要放入數據庫中(下面會講解緣由)。MD5常常和BASE64結合使用。數據庫
加密是經過 「加密算法」 將 "明文" 加密成 「密文」。 咱們能夠經過 「密鑰」 和 「解密算法」 將 「密文」 還原成 「明文」。安全
錯誤的理解:bash
錯誤糾正:工具
MD5是用於計算摘要的散列算法,計算結果是 固定長度爲 128bit 的二進制串。不是加密算法。開發工具
這樣理解是不嚴謹的,由於咱們也是用MD5計算出帳戶密碼的摘要,經過這個摘要是沒法還原出帳戶的原始密碼的。由於摘要只是個驗證身份的令牌,不能經過令牌還原出原始數據。網站
MD5算法是不可逆的,咱們沒法從算法入手還原出MD5算法處理前的結果。因爲MD5是信息-摘要算法,經過摘要是沒法獲得原始數據的,因此解密這一說法自己就是錯誤的。編碼
雖然MD5算法不可逆,也沒法經過摘要還原出原始數據,但這不表明安全性就是無懈可擊的。加密
因爲字符串經過MD5計算的摘要是惟一的,那麼MD5字典隨着時間積累保存愈來愈多的MD5記錄,經過窮舉這個字典就能夠很簡單地找到你的密碼。spa
好比下面這個網站就保存了不少MD5記錄,也就是這個網站有一個MD5字典,咱們輸入經過MD5算法的123的摘要。經過窮舉這個字典,立刻就找到這個摘要對應的信息是123。
以上不是經過破解MD5算法,也不是還原信息摘要的方式獲得原始信息。而是經過窮舉MD5字典,字典裏面保存着相似 (摘要) 202CB962AC59075B964B07152D234B70:(信息)123
這樣的記錄,咱們才知道該摘要對應的信息是123。
窮舉字典法要求字典保存MD5算法的信息和計算後的摘要,字典是有限的,那麼多信息不可能都存下來,因此通常只會保存長度比較短的信息和對應的信息摘要。通常狀況下密碼長度不會很長,因此經過窮舉字典基本上均可以找到密碼摘要對應的信息。
退一步說,即便MD5字典保存了很長的信息和對應的信息摘要,那麼說明這個字典是保存的記錄是很是很是多的,即便窮舉的話也要花很是漫長的時間才能窮舉到該記錄。
因此咱們能夠經過提升信息的長度,這樣MD5字典存在該信息的 信息-摘要 記錄的可能性很低,即便存在也要耗費很是多的時間去窮舉。
之前寫Rails應用的時候,先將信息進行BASE64編碼,這樣獲得的就是一個很長的字符串。
如今寫SSM應用的時候,我沒有采起先用BASE64進行編碼的方案,而是 "密碼 + 任意字符串"再用MD5算法計算出摘要。好比 密碼是password,那麼我會下面這麼作:
1,result = MD5算法(password + "adfasdfsdafsadasou89ZXcj@#$aKJdjklj;easd../dSF.,";)
2,將result存入數據庫
複製代碼