Python3?hashlib?模塊基本用法詳解
在 Python3 中,hashlib模塊提供了一系列加密哈希算法的實現(xiàn),用于計算數(shù)據(jù)的哈希值。哈希算法(又稱散列算法)通過將任意長度的輸入數(shù)據(jù)轉(zhuǎn)換為固定長度的輸出(哈希值),具有單向性(無法從哈希值反推原始數(shù)據(jù))和唯一性(不同數(shù)據(jù)大概率產(chǎn)生不同哈希值)的特點,常用于數(shù)據(jù)校驗、密碼存儲、數(shù)字簽名等場景。
一、基本用法
hashlib的核心流程是:創(chuàng)建哈希對象 → 更新數(shù)據(jù) → 獲取哈希值。
關(guān)鍵說明:
- 哈希算法處理的是字節(jié)數(shù)據(jù)(bytes),因此字符串需先通過
encode()編碼為 bytes(如utf-8)。 - 可通過
update()多次傳入數(shù)據(jù),最終計算的是所有數(shù)據(jù)的總哈希值(適合分塊處理大數(shù)據(jù))。 - 哈希值可通過
digest()(返回 bytes 類型)或hexdigest()(返回十六進制字符串,更易讀)獲取。
二、常用哈希算法及示例
hashlib支持多種主流算法,如md5、sha1、sha256、sha512等(安全性:sha512 > sha256 > sha1 > md5)。
1. MD5
import hashlib
# 1. 創(chuàng)建MD5哈希對象
md5_hash = hashlib.md5()
# 2. 更新數(shù)據(jù)(需傳入bytes類型)
data = "hello world"
md5_hash.update(data.encode("utf-8")) # 字符串編碼為bytes
# 3. 獲取哈希值(十六進制字符串)
print(md5_hash.hexdigest()) # 輸出:5eb63bbbe01eeed093cb22bb8f5acdc32. SHA-256
import hashlib # 直接傳入bytes數(shù)據(jù)(b前綴表示bytes) sha256_hash = hashlib.sha256(b"hello world") # 獲取哈希值 print(sha256_hash.hexdigest()) # 輸出:a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e44b0
3. 分塊更新數(shù)據(jù)(適合大文件)
對于大文件或流式數(shù)據(jù),可分多次調(diào)用update()累積數(shù)據(jù),避免一次性加載到內(nèi)存:
import hashlib
def calculate_file_hash(file_path, algorithm="sha256"):
# 創(chuàng)建指定算法的哈希對象(通過hashlib.new()支持動態(tài)指定算法)
hash_obj = hashlib.new(algorithm)
# 分塊讀取文件并更新哈希
with open(file_path, "rb") as f:
while chunk := f.read(4096): # 每次讀取4096字節(jié)(可調(diào)整)
hash_obj.update(chunk)
return hash_obj.hexdigest()
# 示例:計算某文件的SHA-256哈希
print(calculate_file_hash("large_file.zip")) # 輸出文件的哈希值三、重要屬性與方法
| 方法 / 屬性 | 說明 |
|---|---|
hashlib.new(algorithm) | 創(chuàng)建指定算法的哈希對象(如new("sha3_256")) |
update(data) | 向哈希對象傳入數(shù)據(jù)(data 必須為 bytes) |
digest() | 返回 bytes 類型的哈希值 |
hexdigest() | 返回十六進制字符串類型的哈希值 |
digest_size | 哈希值的字節(jié)長度(如 SHA-256 為 32 字節(jié)) |
block_size | 算法的塊大?。ㄓ糜趦?nèi)部計算) |
algorithms_available | 系統(tǒng)支持的所有哈希算法列表 |
algorithms_guaranteed | 所有 Python 環(huán)境都保證支持的算法列表 |
四、注意事項
- 安全性:
MD5和SHA1已被證明存在安全漏洞,不推薦用于密碼存儲、數(shù)字簽名等安全場景,建議使用SHA-256、SHA-512或更先進的SHA3系列。 - 數(shù)據(jù)類型:必須傳入 bytes 類型數(shù)據(jù),字符串需先編碼(如
str.encode("utf-8")),否則會報錯。 - 哈希碰撞:理論上不同數(shù)據(jù)可能產(chǎn)生相同哈希值(碰撞),但好的算法(如 SHA-256)碰撞概率極低,可忽略。
五、擴展:帶密鑰的哈希(HMAC)
hashlib常與hmac模塊配合使用,實現(xiàn)帶密鑰的哈希(HMAC),用于身份驗證等場景(如 API 簽名):
import hmac import hashlib key = b"my_secret_key" # 密鑰(bytes類型) data = b"hello world" # 待加密數(shù)據(jù) # 計算HMAC-SHA256 hmac_obj = hmac.new(key, data, digestmod=hashlib.sha256) print(hmac_obj.hexdigest()) # 輸出帶密鑰的哈希值
通過hashlib,可以便捷地實現(xiàn)數(shù)據(jù)哈希計算,滿足數(shù)據(jù)校驗、安全存儲等需求。實際使用時需根據(jù)場景選擇合適的算法,并注意數(shù)據(jù)類型和安全性要求。
到此這篇關(guān)于Python3 hashlib 模塊的文章就介紹到這了,更多相關(guān)Python hashlib 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python創(chuàng)建LNK文件選擇器并導(dǎo)出配置文件
在這篇博客中,我將介紹如何使用Python的wxPython庫開發(fā)一個GUI應(yīng)用程序,該應(yīng)用程序可以選擇文件夾中的.lnk(快捷方式)文件,并將選中的文件導(dǎo)出為特定格式的buttons.ini配置文件,需要的朋友可以參考下2025-01-01
純Python代碼從零構(gòu)建一個AI多智能體系統(tǒng)
單個 AI 能做的事有限,三個 AI 分工協(xié)作能做的事遠超你想象,本文介紹了如何使用Python實現(xiàn)一個多智能體系統(tǒng),文中還提供了系統(tǒng)架構(gòu)設(shè)計、代碼實現(xiàn)和執(zhí)行流程詳解,希望對大家有所幫助2026-04-04
Python數(shù)據(jù)分析之NumPy常用函數(shù)使用詳解
本篇將介紹怎樣從文件中載入數(shù)據(jù),以及怎樣使用NumPy的基本數(shù)學(xué)和統(tǒng)計分析函數(shù)、學(xué)習(xí)讀寫文件的方法,并嘗試函數(shù)式編程和NumPy線性代數(shù)運算,來學(xué)習(xí)NumPy的常用函數(shù),需要的可以參考一下2022-05-05
python使用wxpy輕松實現(xiàn)微信防撤回的方法
今天小編就為大家分享一篇python使用wxpy輕松實現(xiàn)微信防撤回的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
pandas實現(xiàn)datetime64與unix時間戳互轉(zhuǎn)
這篇文章主要介紹了pandas實現(xiàn)datetime64與unix時間戳互轉(zhuǎn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

