Python 校驗和

Vaibhhav Khetarpal 2023年1月30日 2021年12月2日
  1. 在 Python 中使用 hashlib.md5() 函式生成和檢查 MD5 檔案的校驗和
  2. 在 Python 中使用 os 模組生成和檢查 MD5 檔案的 checksum
Python 校驗和

當談到任何成功和流行的程式語言時,雜湊證明是其中必不可少的一部分。雜湊的一個這樣的元件在日常程式設計中非常重要並且非常相關,稱為校驗和。

本文將討論校驗和以及如何為 MD5 檔案生成校驗和。

校驗和在 Python 中用於檔案中的錯誤檢測。他們的基本任務是驗證給定檔案中的資料。儘管非常相似,但它與 Python 提供的內建雜湊在某種程度上不同,因為它是確定性的。

在 Python 中使用 hashlib.md5() 函式生成和檢查 MD5 檔案的校驗和

hashlib 模組用於為幾種不同的訊息摘要和安全雜湊演算法實現一個通用介面。為了成功實現這個方法,我們需要將 hashlib 模組匯入 Python 程式碼。

在這裡,我們將主要使用 hashlib.md5() 函式,以及 update()hexdigest() 函式分別更新和返回一個十六進位制值。

以下程式碼使用 hashlib.md5() 函式在 Python 中生成和檢查 MD5 檔案的 checksum

import hashlib
def md5(file1):
    md5h = hashlib.md5()
    with open(file1, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            md5h.update(chunk)
    return md5h.hexdigest()

我們應該注意,此程式碼將返回一個代表給定摘要的十六進位制字串。僅使用 digest() 函式將返回壓縮位元組。程式設計師可以使用這些函式中的任何一個,記住他們想要的輸出。

在 Python 中使用 os 模組生成和檢查 MD5 檔案的 checksum

Python 中的 os 模組提供對多個有助於與作業系統互動的函式的訪問。os 模組很大,包含多個模組,所有模組都用於實現不同的目的。

在這裡,我們下載一個隨機影象,然後使用我們建立的 Python 函式計算 MD5 的校驗和,然後我們最終將其與藉助 Unix 命令生成的校驗和進行比較。

get_checksum() 函式的函式定義:

import hashlib 
def get_checksum(filename, hash_function):
    """Generate checksum for file based on hash function (MD5).
 
    Args:
        filename (str): Path to file that will have the checksum generated.
        hash_function (str):  Hash function name - supports MD5
 
    Returns:
        str`: Checksum based on Hash function of choice.
 
    Raises:
        Exception: Invalid hash function is entered.
 
    """
    hash_function = hash_function.lower()
 
    with open(filename, "rb") as f:
        bytes = f.read() 
        if hash_function == "md5":
            readable_hash = hashlib.md5(bytes).hexdigest()
        
        else:
            Raise("{} is an invalid hash function. Please Enter MD5 value")
 
    return readable_hash

以下程式碼使用上面定義的 get_checksum() 函式以及 os 模組在 Python 中生成和檢查 MD5 檔案的 checksum

import os
pic = "g_circle-300x300.png"
resmd5 = get_checksum(pic, "md5")
os.system("md5 {}".format(pic))
print('Hash Function: MD5 - Filename: {}'.format(resmd5))

MD5 雖然被廣泛使用,但最近發現它被破解幷包含很多缺陷。生成和檢查檔案 checksum 的過程可能非常危險,不建議為此使用 MD5 檔案。

此外,如果你需要加密保護的內容,那麼 MD5 檔案並不是真正的最佳選擇,因為在這方面它不僅符合要求。

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn