#MD5的必要性以及實際應用場景 ##前言 MD5爲計算機安全領域普遍使用的一種散列函數,用以提供消息的完整性保護。用於確保信息傳輸完整一致。是計算機普遍使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言廣泛已有MD5實現。將數據(如漢字)運算爲另外一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD二、MD3和MD4。算法
PS:寫這篇文章的本意是把我在工做中使用的MD5加密技巧分享出來,和你們一塊兒交流,可能應爲水平有限會有遺漏之處望你們包含,也請你們提出建議我會進一步完善. ##1.MD5算法具備如下特色:## 一、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。 二、容易計算:從原數據計算出MD5值很容易。 三、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所獲得的MD5值都有很大區別。 四、弱抗碰撞:已知原數據和其MD5值,想找到一個具備相同MD5值的數據(即僞造數據)是很是困難的。 五、強抗碰撞:想找到兩個不一樣的數據,使它們具備相同的MD5值,是很是困難的。 根據以上的特定咱們能總結出幾個根據以上特色衍生出來能夠供咱們使用的特性:數據庫
1.方便存儲:MD5加密出來都是32位的字符串,可以給定固定大小的空間存儲,傳輸,驗證 2.文件加密:MD5運用在文件加密上頗有優點,應爲只須要32爲字符串就能對一個巨大的文件進行驗證完整性 3.不 可 逆:MD5加密出來只會截取末尾32位,具備良好的安全性,若是是對於參數加密很難僞造MD5 4.加密損耗低:MD5加密對於性能的消耗微乎其微(我得到的結果是:0.001毫秒)
##2.實際上須要如何應用呢## 我在實踐中經常會用到的MD5校驗加密通常運用場景:用戶密碼,請求參數,文件校驗 ###2.1.用戶密碼### 對於用戶密碼加密最高境界就是:別人得到你數據庫的用戶資料別人也沒有辦法獲知密碼.要達到就要有一套複雜的加密規則,通常經常使用的規則好比:編程
MD5(MD5(用戶名+用戶密碼)+MD5(KEY+項目名+公司名)) 這樣能夠避免和別人碰庫不排除別人用MD5來攻擊你的服務器來匹配.安全
固然還能夠自定不少種加密方法,就算知道加密方法也幾乎沒法去推送出用戶原密碼是什麼 ###2.2.請求參數校驗### 都與服務器來言排除系統問題最大的問題就是懼怕請求被攔截,攔截修改以後就有不少漏洞的可能性了服務器
爲了不被攔截,參數被修改這種文件的經常使用方法就是對請求參數進行校驗,就算攔截了請求參數修改了只要模擬不出MD5加密出來的值,在服務器過濾器直接就會進行攔截.編程語言
我這邊推薦的請求校驗方法在傳遞參數的時候帶上 MD5值 隨機數 時間戳 固然這幾個都是由客戶端生成 MD5=MD5(隨機數+時間戳+MD5(KEY+公司名+項目名)) 固然這個規則也是能夠定製的函數
請求參數在服務器攔截器就用客戶端傳遞過來的 隨機數 時間戳 來作校驗若是不經過就不讓繼續訪問(在這裏的隨機數 時間戳在後面的請求安全請求惟一性驗證中會起到很大的做用因此建議保留) ###2.3文件校驗### 固然對於一些圖片已經一些很小很小的文件來講能夠不用MD5校驗應爲基本上都是一次請求就完成了上傳,並且顯示的時候也不須要驗證圖片完不整.性能
可是若是是遇到了大文件上傳MD5 就起到做用了,固然不是吧一個幾個G 的文件一次性上傳使用MD5校驗,這邊100%會失敗 就算傳遞到服務端了 這個時間是不能被接受的 ,並且服務器最好是對請求作好限制(之後會開一篇來單獨探討文件上傳的問題)加密
咱們對於大文件上傳的處理方式是進行分片上傳,也就是所謂的斷點續傳,裏面的實現機制code
若是有一個5MB的文件 客戶端把它分割成5份 1MB的文件 在上傳的時候 上傳兩個MD5值 一個是當前上傳的片1MB文件流的MD5 還有一個就是拼接以後的MD5(若是如今上傳的是第二片 這個MD5就應該是第一片加上第二片的MD5)經過這樣的方式能保證文件的完整性
當若是文件傳到一半斷了,用戶換了臺機器傳 經過驗證文件MD5 值就能夠得知用戶已經傳到了第幾片 就能夠告訴用戶從第幾片開始傳遞 就解決了這個問題 ##3.總結:## 在不知不覺中MD5校驗早已經運用到咱們生活中的點點滴滴,無時無刻不在使用者MD5.經過以上的例子說明了MD5在咱們服務器開發安全中扮演着不可替代的角色,在平常的開發中使用MD5校驗技術能夠有效的避免莫些安全性的問題.