在Python中計算大檔案的MD5雜湊值
Python的hashlib模組為計算加密雜湊值提供了一個方便的接口。然而,對於大小超過系統記憶體的特別大的文件,直接使用 hashlib 可能會出現問題。
解決方案:漸進式哈希
為了解決這個問題,我們採用漸進式哈希通過以可管理的區塊讀取檔案。這種方法可確保對整個檔案內容進行哈希處理,而不會消耗過多的記憶體。以下是實作此技術的範例 Python 函數:
import hashlib
def md5_for_file(f):
block_size = 2**20
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
要計算大檔案的MD5 雜湊值,您可以如下呼叫函數:
with open("filename", "rb") as f:
md5 = md5_for_file(f)
檔案模式註意事項
確保使用「rb」以二進位模式開啟檔案以獲得準確結果。使用“r”可能會導致計算不正確。
其他注意事項
為了方便起見,下面介紹了該函數的改進版本:
import hashlib
import os
def generate_file_md5(rootdir, filename):
m = hashlib.md5()
with open(os.path.join(rootdir, filename), "rb") as f:
buf = f.read()
while buf:
m.update(buf)
buf = f.read()
return m.hexdigest()
建議使用 jacksum 等外部工具交叉檢查計算出的雜湊值以驗證準確性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3