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 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