介紹如何在 Python 中計算檔案的 SHA256 雜湊檢查碼,判斷檔案內容是否有損毀或遭受竄改。
SHA256 是一種雜湊演算法,不同的資料經過 SHA256 所計算出來的雜湊值都不相同,我們可以透過比對檔案的 SHA256 雜湊值來判斷檔案內容是否完整,例如在以網路傳輸檔案之前,先計算檔案的 SHA256 雜湊值,然後在檔案傳輸之後,重新計算一次 SHA256 雜湊值,比對前後兩筆 SHA256 雜湊值是否相同,即可判斷檔案在傳輸之後是否保持完整的內容。
若要計算檔案內容的 SHA256 雜湊值,可以用二進位的方式開啟檔案,再以 hashlib
模組計算 SHA256 雜湊值,而讀取檔案時建議採用緩衝區分批讀取的方式,避免一次讀取太大的檔案,浪費記憶體空間:
import hashlib # 要計算 SHA256 雜湊值的檔案 filename = "my_file.txt" # 緩衝區大小 BufferSize = 65536 # 建立 SHA256 物件 sha256 = hashlib.sha256() # 以二進位方式開啟檔案 with open(filename, "rb") as f: while True: # 讀取檔案內容 data = f.read(BufferSize) # 若沒有資料則跳出迴圈 if not data: break # 計算 SHA256 雜湊值 sha256.update(data) # 輸出 SHA256 計算結果 print(sha256.hexdigest())
執行之後,即可輸出檔案內容的 SHA256 雜湊值:
2867175757580c82c5a19a1583abe429979d39e818e42d0cfcb5ef84006b5702
若要驗證 Python 計算的 SHA256 雜湊值是否正確,可以使用 Linux 中的 sha256sum
指令:
# 計算 SHA256 雜湊值
sha256sum my_file.txt
2867175757580c82c5a19a1583abe429979d39e818e42d0cfcb5ef84006b5702 my_file.txt
hashlib
模組支援相當多類型的雜湊演算法,除了 SHA256 之外,常見的 MD5、SHA1、SHA3-256 也都支援,使用方式都類似,只要選用對應名稱的函數呼叫即可,例如 MD5 就選用 hashlib.md5()
,而 SHA3-256 則選擇 hashlib.sha3_256()
,若要查看所有支援的雜湊演算法可以參考 hashlib
的官方文件。
若要對 Python 中的文字訊息計算 SHA 雜湊值,可以將文字訊息以 UTF-8 編碼之後,再以 hashlib
模組計算 SHA256 雜湊值,以下是一個簡單的範例:
import hashlib # 要計算 SHA256 的文字訊息 stringData = '這是一段重要的文字訊息!' # 以 UTF-8 編碼 utf8Data = stringData.encode('utf-8') # 計算 SHA256 雜湊值 hashString = hashlib.sha256(utf8Data).hexdigest() # 輸出 SHA256 雜湊值 print(hashString)
e51c2649197dab72378b92c2b4f37bea9740b477746575cf829f86bfd3857161