Python MD5加密詳解以及多次加密的坑

2021-09-01 12:30:10 字數 2025 閱讀 3440

在python中可以使用hashlib這個庫來使用md5加密:

import hashlib
在使用md5加密的使用要注意加密內容的編碼格式:

import hashlib                   //匯入hash庫函式

md5_object = hashlib.md5() //建立乙個md5物件

md5_object.update(b'admin') //新增去要加密的文字

md5_result = md5_object.hexdigest() //獲取加密結果

如果文字是中文的話,需要進行編碼編碼,可以轉為utf-8、gbk、gb2312、gb18030,不分大小寫,因為gbk/gb2312/gb18030均是針對漢字的編碼,所以md5加密後結果一樣。

md5_object = hashlib.md5()

md5_object.update('admin'.encode(encoding='utf-8'))

md5_result = md5_object.hexdigest()

print(md5_result)

檢視原始碼的解釋:

如果想要多次加密,一不小心加密結果和自己預期的不一樣,例如,第一次加密後,想對第一次加密結果再次加密,然後對第二次結果再次加密,然後將第三次結果作為最終加密結果。

text = 'admin'

md5 = hashlib.md5()

md5.update(text.encode('utf-8'))

first_md5 = md5.hexdigest()

md5.update(first_md5.encode('utf-8'))

second_md5 = md5.hexdigest()

md5.update(second_md5.encode('utf-8'))

last_md5 = md5.hexdigest()

程式結果:

first_md5: '21232f297a57a5a743894a0e4a801fc3' // 結果沒錯

second_md5: 'c0e024d9200b5705bc4804722636378a' // 結果錯誤

last_md5: '8c3bf9f4ae60758c70c0db64c6d247a8' // 結果錯誤

正確結果:

first_md5: '21232f297a57a5a743894a0e4a801fc3'

second_md5: 'c3284d0f94606de1fd2af172aba15bf3'

last_md5: '77e2edcc9b40441200e31dc57dbb8829'

其實仔細一看很容易理解,我們上面加密都是使用同一md5物件,其實就是第一次update,md5物件就會將加密資料存起來,然後通過hexdigest方法加密,第二次使用update,這時候是將已經存起來的加密資料和第二次update的加密資料進行相加,然後將相加後的結果進行加密,以此類推,之後的加密過程都是這樣,這也解釋了為什麼和預期的加密結果不一樣。

如果想要和預期結果一樣,我們只需要每次加密就新建乙個md5物件。

text = 'admin'

for i in range(3):

md5 = hashlib.md5()

md5.update(text.encode(encoding='utf-8'))

md5_result = md5.hexdigest()

text = md5_result

print(md5_result)

tip:

我們可以使用sql來獲取md5加密,例如:

Python md5加密演算法

coding utf 8 import hashlib import time def md5 user md5 加密token ctime str time.time m hashlib.md5 bytes user,encoding utf 8 md5接收位元組型別資料,中文先用utf 8加密 ...

pythonmd5加密原理 MD5加密原理

md5 加密c zz 1.來歷 md5的全稱是 message digest algorithm 5 資訊摘要演算法,在 年代初由 mit laboratory for computer science 和rsa data security inc 的ronald l.rivest 開發出來,經md...

python md5 請求 構造

md5加密的方法 import hashlib m hashlib.md5 建立md5物件 m.update new temp 生成加密字串,其中temp是已拼接好的字串 按字母大小拼接可以用函式sorted見 讓字典 按值大小排序的方法 sign m.hexdigest 獲取加密後的字串 prin...