Categories: Linux

Python 計算檔案 SHA256 雜湊檢查碼教學與範例

介紹如何在 Python 中計算檔案的 SHA256 雜湊檢查碼,判斷檔案內容是否有損毀或遭受竄改。

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 的官方文件

計算文字訊息 SHA256 雜湊值

若要對 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
Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago