Python hashlib模組實現MD5加密

2021-10-01 03:06:03 字數 2539 閱讀 7442

md5訊息摘要演算法(英語:md5 message-digest algorithm),一種被計算機安全領域廣泛使用的密碼雜湊函式,可以產生出乙個128位(16位元組)的雜湊值(hash value),

用以提供訊息的完整性保護,用於確保資訊傳輸完整一致。

md5是最常見的摘要演算法,速度很快,生成結果是固定的128 bit位元組,通常用乙個32位的16進製制字串表示。

md5是乙個安全的雜湊演算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆。所以要解密md5沒有現成的演算法,只能用窮舉法,把可能出現的明文,用md5演算法雜湊之後,把得到的雜湊值和原始的資料形成乙個一對一的對映表,通過比在表中比破解密碼的md5演算法雜湊值,通過匹配從對映表中找出破解密碼所對應的原始明文。

md5演算法具有以下特點:

1、壓縮性:任意長度的資料,算出的md5值長度都是固定的。

2、容易計算:從原資料計算出md5值很容易。

3、抗修改性:對原資料進行任何改動,哪怕只修改1個位元組,所得到的md5值都有很大區別。

4、弱抗碰撞:已知原資料和其md5值,想找到乙個具有相同md5值的資料(即偽造資料)是非常困難的。

5、強抗碰撞:想找到兩個不同的資料,使它們具有相同的md5值,是非常困難的。

md5演算法使用的特性:

方便儲存:md5加密出來都是32位的字串,能夠給定固定大小的空間儲存,傳輸,驗證

檔案加密:md5演算法運用在檔案加密上很有優勢,應為只需要32為字串就能對乙個巨大的檔案進行驗證完整性

不 可 逆:md5加密出來只會擷取末尾32位,具有良好的安全性,如果是對於引數加密很難偽造md5

加密損耗低:md5演算法加密對於效能的消耗微乎其微(速度快)

md5演算法的實際應用

1.密碼驗證

可以當做密碼驗證,為了保證密碼不在cmd5**上破譯,最好加鹽及亂序,也可以只取一部分md5加密後的內容。md5是不可逆演算法,只要保證演算法不變,就能和資料庫中的md5相匹配。

郵箱密碼驗證過程:首先使用者建立郵箱時,郵件系統會對密碼進行md5加密後儲存到資料庫,這個時候在資料庫裡面看到的密碼是加密的,保證密碼只能使用者自己知道,減少密碼洩漏的風險。

等到你登陸郵箱時,系統不是檢驗使用者的密碼,而是檢驗使用者輸入的密碼經md5加密以後和資料庫內加密密碼進行對比,判斷是否相等。

2.請求引數校驗

對於伺服器來來說,除了系統問題最大的問題就是害怕請求被攔截,攔截後修改引數後就會出現很多漏洞的可能性。

為了避免被攔截、引數被修改,常用方法就是對請求引數進行校驗,就算攔截了請求引數並修改它,只要模擬不出md5加密出來的值,伺服器過濾器直接就會進行攔截。

校驗過程:客戶端通過http或者https請求伺服器時,對其中的引數按約定的md5加密方法生成乙個token,伺服器接收資訊後按照同樣的md5加密方法生成乙個值,然後對比客戶端傳過來的token進行對比,一致說明請求引數沒有被修改。

3.版權驗證

4.檔案上傳

檔案上傳時會上傳檔案的資訊,此時將檔案的md5上傳,伺服器中儲存這個md5值,並儲存這個md5值所對應的已上傳位元組長度,比如未上傳對應為0,已上傳對應為-1,已上傳200位元組就對應200,這個上傳的時候可以匹配到這個檔案在伺服器中的狀態,方便做斷點續傳,只要原始檔沒有更改,即使換個名字,換個賬戶都可以在伺服器找到對應的檔案,所以當伺服器中有已經上傳完畢的此檔案時,別人再上傳這個檔案就可以實現秒傳。

python的hashlib提供了常見的摘要演算法,如md5,sha1等等。

摘要演算法又稱雜湊演算法、雜湊演算法。它通過乙個函式,把任意長度的資料轉換為乙個長度固定的資料串(通常用16進製制的字串表示)。

在python3的標準庫中,已經移除了md5模組,而關於hash加密演算法都放在hashlib這個標準庫中,如sha1、sha224、sha256、sha384、sha512和md5演算法等。

具體**實現:

import hashlib

import time

encode = 'utf-8' # 編碼

time_span = str(int(time.time()))

hl = hashlib.md5() # 建立md5物件

hl.update(o_token.encode(encoding=encode)) # 轉換為bytes

token = hl.hexdigest().upper() # hexdigest() 加密過程

print('第一種md5加密後為 :' + token)

# 另一種寫法:b字首代表的就是bytes

str_md5 = hashlib.md5(b'md5test.').hexdigest().upper()

print('第二種md5加密後為 :' + str_md5)

python hashlib模組使用詳解

這個模組實現了乙個通用的介面來實現多個不同的安全雜湊和訊息摘要演算法。包括fips安全雜湊演算法sha1,sha224,sha256,sha384和sha512 在fips 180 2中定義 以及rsa的md5演算法 在網際網路rfc 1321術語 安全雜湊 和 訊息摘要 是可互換的。較舊的演算法被...

Python hashlib模組的使用示例

一.hashlib模組 用於加密相關的操作,3.x裡代替了md5模組和sha模組,主要提供 sha1,sha224,sha256,sha384,sha512,md5演算法。1.使用hashlib模組進行md5加密。import hashlib m hashlib.md5 m.update b hel...

Python hashlib加密模組常用方法解析

主要用於對字串的加密,最常用的為md5加密 import hashlib def get md5 data obj hashlib.md5 obj.update data.encode utf 8 result obj.www.cppcns.comhexdigest return result va...