def get_md5(password):在寫網路爬蟲模擬登陸時,遇到提交表單時是一串數字和字母,才知道經過了md5加密。#1-例項化加密物件
pswmd5=hashlib.md5()
#2-對密碼進行加密
pswmd5.update(password.encode('utf-8'))
#3-返回加密後的密碼
return pswmd5.hexdigest()
md5加密的密碼
md5訊息摘要演算法(英語:md5 message-digest algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。md5是最常見的摘要演算法,速度很快,生成結果是固定的128 bit位元組,通常用乙個32位的16進製制字串表示。
摘要演算法的應用
任何允許使用者登入的**都會儲存使用者登入的使用者名稱和口令。使用者名稱和口令存到資料庫表中。
name | password
--------+----------
michael | 123456
bob | abc999
如果以明文儲存使用者口令,如果資料庫洩露,所有使用者的口令就落入黑客的手裡。此外,**運維人員是可以訪問資料庫的,也就是能獲取到所有使用者的口令。
正確的儲存口令的方式是不儲存使用者的明文口令,而是儲存使用者口令的摘要,比如md5:
username | password
---------+---------------------------------
michael | e10adc3949ba59abbe56e057f20f883e
bob | 878ef96e86145580c38c87f0410ad153
當使用者登入時,首先計算使用者輸入的明文口令的md5,然後和資料庫儲存的md5對比,如果一致,說明口令輸入正確,如果不一致,口令肯定錯誤。這樣即使運維人員能訪問資料庫,也無法獲知使用者的明文口令。
python的hashlib提供了常見的摘要演算法,如md5,sha1等等。
摘要演算法又稱雜湊演算法、雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串(通常用16進製制的字串表示)。
在python3的標準庫中,已經移除了md5模組,而關於hash加密演算法都放在hashlib這個標準庫中,如sha1、sha224、sha256、sha384、sha512和md5演算法等。
python3的hashlib官方文件(英文)
# 由於md5模組在python3中被移除
# 在python3中使用hashlib模組進行md5操作
import hashlib
# 待加密資訊
str = 'this is a md5 test.'
# 建立md5物件
m = hashlib.md5()
# tips
# 此處必須encode
# 若寫法為m.update(str) 報錯為: unicode-objects must be encoded before hashing
# 因為python3裡預設的str是unicode
# 或者 b = bytes(str, encoding='utf-8'),作用相同,都是encode為bytes
b = str.encode(encoding='utf-8')
m.update(b)
str_md5 = m.hexdigest()
print('md5加密前為 :' + str)
print('md5加密後為 :' + str_md5)
# 另一種寫法:b『』字首代表的就是bytes
str_md5 = hashlib.md5(b'this is a md5 test.').hexdigest()
print('md5加密後為 :' + str_md5)
執行結果
對英文加密,可以使用b' '
字首。
如果要對中文加密,使用b' '
字首來寫會報錯,原因在於字元轉碼問題,b' '
在python中只能對ascii字元進行轉碼。
要用encode(encoding='utf-8')
將中文轉碼成utf-8:
>>> import hashlib
>>> data = '你好'
>>> hashlib.md5(data.encode(encoding='utf-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'
其它中文編碼md5加密可以看到gbk、gb2312、gb18030編碼的加密結果相同,而與utf-8的加密結果不同。
>>> hashlib.md5('你好'.encode(encoding='utf-8')).hexdigest()
'7eca689f0d3389d9dea66ae112e5cfd7'
>>> hashlib.md5('你好'.encode(encoding='gbk')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
>>> hashlib.md5('你好'.encode(encoding='gb2312')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
>>> hashlib.md5('你好'.encode(encoding='gb18030')).hexdigest()
'b94ae3c6d892b29cf48d9bea819b27b9'
關於每個方法的解析,可以參考:
csdn:python3中的md5加密
關於python編碼、encode、decode的內容,可以參考:
廖雪峰python教程:字串和編碼
csdn:python中的encode()和decode()函式
csdn:python3大作戰之encode與decode講解
csdn:python之md5加密
csdn:python3中的md5加密
廖雪峰python教程:hashlib
Python3中的md5加密
在寫網路爬蟲模擬登陸時,遇到提交表單時是一串數字和字母,才知道經過了md5加密。md5加密的密碼 md5訊息摘要演算法 英語 md5 message digest algorithm 一種被廣泛使用的密碼雜湊函式,可以產生出乙個128位 16位元組 的雜湊值 hash value 用於確保資訊傳輸完...
Python3中的md5加密
python的hashlib提供了常見的摘要演算法,如md5,sha1等等。摘要演算法又稱雜湊演算法 雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串 通常用16進製制的字串表示 在python3的標準庫中,已經移除了md5模組,而關於hash加密演算法都放在hashlib這個...
python3進行md5加密
import hashlib,base64 md5加密 s 123 m hashlib.md5 s.encode res m.hexdigest print res md5加密 加鹽 def md5 s,salt new s str s salt m hashlib.md5 new s.encode...