您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python的hashlib模塊,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
常用模塊 - hashlib模塊
一、簡介
Python的hashlib提供了常見的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。
什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進制的字符串表示)。
舉個例子,你寫了一篇文章,內容是一個字符串“how to use python hashlib – by mayi”,并附上這篇文章的摘要是“75b850b26f4e75b1ad3db76a255065f2”。如果有人篡改了你的文章,并發表為“how to use python hashlib – by bob”,你可以一下子指定bob篡改了你的文章,因為根據“how to use python hashlib – by bob”計算出的摘要不同于原始文章的摘要。
二、md5加密
import hashlib hash = hashlib.md5() hash.update("mayi".encode("utf-8")) # 7d1080e20427559fcc0a647826741f66 print(hash.hexdigest())
三、sha1加密
import hashlib hash = hashlib.sha1() hash.update("mayi".encode("utf-8")) # c159ce3114fb4553683cf96d91db6d51080c02e8 print(hash.hexdigest())
四、sha256加密
import hashlib hash = hashlib.sha256() hash.update("mayi".encode("utf-8")) # 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93 print(hash.hexdigest())
五、sha384加密
import hashlib hash = hashlib.sha384() hash.update("mayi".encode("utf-8")) # a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f print(hash.hexdigest())
六、sha512加密
import hashlib hash = hashlib.sha512() hash.update("mayi".encode("utf-8")) # 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492 daac2b9c03a89defe print(hash.hexdigest())
七、“加鹽”加密
以上的加密算法雖然很厲害,但仍然存在缺陷,通過撞庫可以反解。所以必要對加密算法中添加自定義key再來做加密。
import hashlib hash = hashlib.md5('python'.encode('utf-8')) hash.update("mayi".encode("utf-8")) # b0758ad1aad20530044668775f389922 print(hash.hexdigest())
八、摘要算法應用
摘要算法能應用到什么地方?舉個常用的例子:
任何允許用戶登錄的網站都會存儲用戶登錄的用戶名和密碼。如何存儲用戶名和密碼呢?方法是存到數據庫表中:
如果以明文保存用戶密碼,如果數據庫泄露,所有用戶的密碼就落入到黑客的手里。此外,網站運維人員是可以訪問數據庫的,也就是能獲取到所有用戶的密碼。
正確的保存密碼的方式是不存儲用戶的明文密碼,而是存儲用戶密碼的摘要,比如MD5:
當用戶登錄時,首先計算用戶輸入的明文密碼的MD5,然后和數據庫存儲的MD5比較,如果一致,說明密碼輸入正確,否則,密碼輸入錯誤。
存儲MD5的好處是即使運維人員能訪問數據庫,也無法獲知用戶的明文密碼。
采用MD5存儲密碼是否就一定安全呢?也不一定。假設你是一個黑客,已經拿到存儲MD5密碼的數據庫,如何通過MD5反推用戶的明文密碼呢?暴力破解費時費力,真正的黑客是不會這么干的。
考慮這么個情況,很多用戶喜歡用“123456”、“888888”、“password”等這些簡單的密碼,于是,黑客可以事先計算出這些常用的密碼的MD5值,得到一個反推表。這樣,無需破解,只需要對比數據庫的MD5,黑客就獲得了使用常用密碼的用戶賬號信息。
對于用戶來講,當然不要使用過于簡單的密碼。但是,我們能否在程序設計上對簡單的密碼加強保護呢?
由于常用密碼的MD5值很容易被反推出來,所以,要確保存儲的用戶密碼不是那些已經被計算出來的常用密碼的MD5就好了,這一方法通過對原始密碼加一個復雜字符串來實現,俗稱“加鹽”。
關于Python的hashlib模塊就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。