經常使用模塊 - hashlib模塊

1、簡介

Python的hashlib提供了常見的摘要算法,如MD五、SHA一、SHA22四、SHA25六、SHA38四、SHA512等算法。python

什麼是摘要算法呢?摘要算法又稱哈希算法、散列算法。它經過一個函數,把任意長度的數據轉換爲一個長度固定的數據串(一般用16進制的字符串表示)。算法

舉個例子,你寫了一篇文章,內容是一個字符串「how to use python hashlib – by mayi」,並附上這篇文章的摘要是「75b850b26f4e75b1ad3db76a255065f2」。若是有人篡改了你的文章,並發表爲「how to use python hashlib – by bob」,你能夠一會兒指定bob篡改了你的文章,由於根據「how to use python hashlib – by bob」計算出的摘要不一樣於原始文章的摘要。數據庫

2、md5加密

import hashlib

hash = hashlib.md5()

hash.update("mayi".encode("utf-8"))

# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())

3、sha1加密

import hashlib

hash = hashlib.sha1()

hash.update("mayi".encode("utf-8"))

# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())

4、sha256加密

import hashlib

hash = hashlib.sha256()

hash.update("mayi".encode("utf-8"))

# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())

5、sha384加密

import hashlib

hash = hashlib.sha384()

hash.update("mayi".encode("utf-8"))

# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())

6、sha512加密

import hashlib

hash = hashlib.sha512()

hash.update("mayi".encode("utf-8"))

# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492daac2b9c03a89defe
print(hash.hexdigest())

7、「加鹽」加密

以上的加密算法雖然很厲害,但仍然存在缺陷,經過撞庫能夠反解。因此必要對加密算法中添加自定義key再來作加密。安全

import hashlib

hash = hashlib.md5('python'.encode('utf-8'))

hash.update("mayi".encode("utf-8"))

# b0758ad1aad20530044668775f389922
print(hash.hexdigest())

8、摘要算法應用

摘要算法能應用到什麼地方?舉個經常使用的例子:併發

任何容許用戶登陸的網站都會存儲用戶登陸的用戶名和密碼。如何存儲用戶名和密碼呢?方法是存到數據庫表中:運維

name函數

password網站

mayi加密

123456spa

bob

abc123

alice

alice2019

若是以明文保存用戶密碼,若是數據庫泄露,全部用戶的密碼就落入到黑客的手裏。此外,網站運維人員是能夠訪問數據庫的,也就是能獲取到全部用戶的密碼。

正確的保存密碼的方式是不存儲用戶的明文密碼,而是存儲用戶密碼的摘要,好比MD5:

name

password

mayi

e10adc3949ba59abbe56e057f20f883e

bob

e99a18c428cb38d5f260853678922e03

alice

02d740cd2a62024d20152c137e67ef65

當用戶登陸時,首先計算用戶輸入的明文密碼的MD5,而後和數據庫存儲的MD5比較,若是一致,說明密碼輸入正確,不然,密碼輸入錯誤。

存儲MD5的好處是即便運維人員能訪問數據庫,也沒法獲知用戶的明文密碼。

採用MD5存儲密碼是否就必定安全呢?也不必定。假設你是一個黑客,已經拿到存儲MD5密碼的數據庫,如何經過MD5反推用戶的明文密碼呢?暴力破解費時費力,真正的黑客是不會這麼幹的。

考慮這麼個狀況,不少用戶喜歡用「123456」、「888888」、「password」等這些簡單的密碼,因而,黑客能夠事先計算出這些經常使用的密碼的MD5值,獲得一個反推表。這樣,無需破解,只須要對比數據庫的MD5,黑客就得到了使用經常使用密碼的用戶帳號信息。

對於用戶來說,固然不要使用過於簡單的密碼。可是,咱們可否在程序設計上對簡單的密碼增強保護呢?

因爲經常使用密碼的MD5值很容易被反推出來,因此,要確保存儲的用戶密碼不是那些已經被計算出來的經常使用密碼的MD5就行了,這一方法經過對原始密碼加一個複雜字符串來實現,俗稱「加鹽」。

相關文章
相關標籤/搜索