【Python】hashlib模块实现MD5加密
MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被計算機安全領(lǐng)域廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值(hash value),
用以提供消息的完整性保護,用于確保信息傳輸完整一致。
MD5是最常見的摘要算法,速度很快,生成結(jié)果是固定的128 bit字節(jié),通常用一個32位的16進制字符串表示。
MD5是一個安全的散列算法,輸入兩個不同的明文不會得到相同的輸出值,根據(jù)輸出值,不能得到原始的明文,即其過程不可逆。所以要解密MD5沒有現(xiàn)成的算法,只能用窮舉法,把可能出現(xiàn)的明文,用MD5算法散列之后,把得到的散列值和原始的數(shù)據(jù)形成一個一對一的映射表,通過比在表中比破解密碼的MD5算法散列值,通過匹配從映射表中找出破解密碼所對應(yīng)的原始明文。
MD5算法具有以下特點:
1、壓縮性:任意長度的數(shù)據(jù),算出的MD5值長度都是固定的。
2、容易計算:從原數(shù)據(jù)計算出MD5值很容易。
3、抗修改性:對原數(shù)據(jù)進行任何改動,哪怕只修改1個字節(jié),所得到的MD5值都有很大區(qū)別。
4、弱抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
5、強抗碰撞:想找到兩個不同的數(shù)據(jù),使它們具有相同的MD5值,是非常困難的。
MD5算法使用的特性:
方便存儲:MD5加密出來都是32位的字符串,能夠給定固定大小的空間存儲,傳輸,驗證
文件加密:MD5算法運用在文件加密上很有優(yōu)勢,應(yīng)為只需要32為字符串就能對一個巨大的文件進行驗證完整性
不 可 逆:MD5加密出來只會截取末尾32位,具有良好的安全性,如果是對于參數(shù)加密很難偽造MD5
加密損耗低:MD5算法加密對于性能的消耗微乎其微(速度快)
MD5算法的實際應(yīng)用
1.密碼驗證
可以當(dāng)做密碼驗證,為了保證密碼不在cmd5網(wǎng)站上破譯,最好加鹽及亂序,也可以只取一部分md5加密后的內(nèi)容。md5是不可逆算法,只要保證算法不變,就能和數(shù)據(jù)庫中的md5相匹配。
郵箱密碼驗證過程:首先用戶創(chuàng)建郵箱時,郵件系統(tǒng)會對密碼進行md5加密后存儲到數(shù)據(jù)庫,這個時候在數(shù)據(jù)庫里面看到的密碼是加密的,保證密碼只能用戶自己知道,減少密碼泄漏的風(fēng)險。
等到你登陸郵箱時,系統(tǒng)不是檢驗用戶的密碼,而是檢驗用戶輸入的密碼經(jīng)md5加密以后和數(shù)據(jù)庫內(nèi)加密密碼進行對比,判斷是否相等。
2.請求參數(shù)校驗
對于服務(wù)器來來說,除了系統(tǒng)問題最大的問題就是害怕請求被攔截,攔截后修改參數(shù)后就會出現(xiàn)很多漏洞的可能性。
為了避免被攔截、參數(shù)被修改,常用方法就是對請求參數(shù)進行校驗,就算攔截了請求參數(shù)并修改它,只要模擬不出MD5加密出來的值,服務(wù)器過濾器直接就會進行攔截。
校驗過程:客戶端通過http或者https請求服務(wù)器時,對其中的參數(shù)按約定的MD5加密方法生成一個token,服務(wù)器接收信息后按照同樣的MD5加密方法生成一個值,然后對比客戶端傳過來的token進行對比,一致說明請求參數(shù)沒有被修改。
3.版權(quán)驗證
當(dāng)一個視頻或者音頻創(chuàng)作出來的時候它的md5是唯一的,若以后有翻錄等版本出來,即使畫質(zhì),聲音,文件名都一樣,但是他們的md5驗證是不一樣的,所以可以驗證版權(quán)。
還比如用某一賬戶下載的視頻它的賬戶信息也會和視頻一起md5操作,如果以后這個人私自傳播通過md5就可以去數(shù)據(jù)庫中查找泄露版權(quán)的情況。
4.文件上傳
文件上傳時會上傳文件的信息,此時將文件的md5上傳,服務(wù)器中存儲這個md5值,并存儲這個md5值所對應(yīng)的已上傳字節(jié)長度,比如未上傳對應(yīng)為0,已上傳對應(yīng)為-1,已上傳200字節(jié)就對應(yīng)200,這個上傳的時候可以匹配到這個文件在服務(wù)器中的狀態(tài),方便做斷點續(xù)傳,只要源文件沒有更改,即使換個名字,換個賬戶都可以在服務(wù)器找到對應(yīng)的文件,所以當(dāng)服務(wù)器中有已經(jīng)上傳完畢的此文件時,別人再上傳這個文件就可以實現(xiàn)秒傳。
Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。
摘要算法又稱哈希算法、散列算法。它通過一個函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串(通常用16進制的字符串表示)。
在python3的標準庫中,已經(jīng)移除了md5模塊,而關(guān)于hash加密算法都放在hashlib這個標準庫中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。
具體代碼實現(xiàn):
總結(jié)
以上是生活随笔為你收集整理的【Python】hashlib模块实现MD5加密的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql给用户授权最大_mysql 给
- 下一篇: mitmproxy抓包 | Python