Python3中的md5加密

2021-08-27 18:26:00 字數 3092 閱讀 2029

在寫網路爬蟲模擬登陸時,遇到提交表單時是一串數字和字母,才知道經過了md5加密。

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加密

def get md5 password 1 例項化加密物件 pswmd5 hashlib.md5 2 對密碼進行加密 pswmd5.update password.encode utf 8 3 返回加密後的密碼 return pswmd5.hexdigest 在寫網路爬蟲模擬登陸時,遇到提交表單時...

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...