MD5的應用場景


MD5為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD5的前身有MD2、MD3和MD4。

PS:寫這篇文章的本意是把我在工作中使用的MD5加密技巧分享出來,和大家一起交流,可能應為水平有限會有遺漏之處望大家包含,也請大家提出建議我會進一步完善.

1.MD5算法具有以下特點:

1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
2、容易計算:從原數據計算出MD5值很容易。
3、抗修改性:對原數據進行任何改動,哪怕只修改1個字節,所得到的MD5值都有很大區別。
4、弱抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。
5、強抗碰撞:想找到兩個不同的數據,使它們具有相同的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%會失敗 就算傳遞到服務端了 這個時間是不能被接受的 ,而且服務器最好是對請求做好限制(以后會開一篇來單獨探討文件上傳的問題)

我們對於大文件上傳的處理方式是進行分片上傳,也就是所謂的斷點續傳,里面的實現機制

如果有一個5MB的文件 客戶端把它分割成5份 1MB的文件 在上傳的時候 上傳兩個MD5值 一個是當前上傳的片1MB文件流的MD5 還有一個就是拼接之后的MD5(如果現在上傳的是第二片 這個MD5就應該是第一片加上第二片的MD5)通過這樣的方式能保證文件的完整性

當如果文件傳到一半斷了,用戶換了台機器傳 通過驗證文件MD5 值就可以得知用戶已經傳到了第幾片 就可以告訴用戶從第幾片開始傳遞 就解決了這個問題

3.總結:

在不知不覺中MD5校驗早已經運用到我們生活中的點點滴滴,無時無刻不在使用者MD5.通過以上的例子說明了MD5在我們服務器開發安全中扮演着不可替代的角色,在日常的開發中使用MD5校驗技術可以有效的避免莫些安全性的問題.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM