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