Python常用模块之hashlib模块
Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。
-
摘要算法又稱哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進制的字符串表示)。
-
摘要算法就是通過摘要函數f()對任意長度的數據data計算出固定長度的摘要digest,目的是為了發現原始數據是否被人篡改過。
-
摘要算法之所以能指出數據是否被篡改過,就是因為摘要函數是一個單向函數,計算f(data)很容易,但通過digest反推data卻非常困難。而且,對原始數據做一個bit的修改,都會導致計算出的摘要完全不同。
-
MD5是最常見的摘要算法,速度很快,生成結果是固定的128 bit字節,通常用一個32位的16進制字符串表示。
MD5算法計算出一個字符串的MD5值
import hashlibmd5 = hashlib.md5() md5.update('how to use md5 in python hashlib?') print (md5.hexdigest()) ## 計算結果如下: d26a53750bc40b38b65a520292f69306如果數據量很大,可以分塊多次調用update(),最后計算的結果是一樣的:
md5 = hashlib.md5() md5.update('how to use md5 in ') md5.update('python hashlib?') print (md5.hexdigest())SHA1的結果是160 bit字節,通常用一個40位的16進制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不過越安全的算法越慢,而且摘要長度更長。
SHA1算法
''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:725638078 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import hashlibsha1 = hashlib.sha1() sha1.update('how to use sha1 in ') sha1.update('python hashlib?') print sha1.hexdigest()摘要算法應用:
任何允許用戶登錄的網站都會存儲用戶登錄的用戶名和口令。它們將用戶名和口令存儲在數據庫表中。
如果以明文保存用戶口令,如果數據庫泄露,所有用戶的口令就落入黑客的手里。此外,網站運維人員是可以訪問數據庫的,也就是能獲取到所有用戶的口令。
正確的保存口令的方式是不存儲用戶的明文口令,而是存儲用戶口令的摘要。
在程序設計上對簡單口令加強保護:
由于常用口令的MD5值很容易被計算出來,所以,要確保存儲的用戶口令不是那些已經被計算出來的常用口令的MD5,這一方法通過對原始口令加一個復雜字符串來實現,俗稱“加鹽”:
hashlib.md5("salt".encode("utf8"))經過Salt處理的MD5口令,只要Salt不被黑客知道,即使用戶輸入簡單口令,也很難通過MD5反推明文口令。
讓使用相同口令的用戶存儲不同的MD5:
如果假定用戶無法修改登錄名,就可以通過把登錄名作為Salt的一部分來計算MD5,從而實現相同口令的用戶也存儲不同的MD5。
摘要算法在很多地方都有廣泛的應用。要注意摘要算法不是加密算法,不能用于加密(因為無法通過摘要反推明文),只能用于防篡改。
但是它的單向計算特性決定了可以在不存儲明文口令的情況下驗證用戶口令。
總結
以上是生活随笔為你收集整理的Python常用模块之hashlib模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python常用模块之random模块
- 下一篇: Python常用模块之sys模块