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