计算文件Hash值(散列)的 Python 程序
在本文中,您将学习如何查找文件的散列并显示它。
为了理解这个例子,你应该了解下面的 Python 编程主题:
- Python Functions 函数
- Python User-defined Functions Python 用户定义函数
- Python File I/O Python 文件 i/o
哈希函数接受任意数量的数据并返回固定长度的位字符串。该函数的输出称为摘要消息。
它们在密码学中被广泛用于身份验证目的。有许多散列函数,如 MD5、 sha-1等。
在这个例子中,我们将演示如何对文件求hash值。我们将使用 sha-1散列算法。Sha-1的摘要有160位长。
本程序不是一次将文件读取到内存中计算,而是分块读取,防止文件过大把内存占满了。
计算散列值的源代码如下:
# Python program to find the SHA-1 message digest of a file # importing the hashlib module import hashlib def hash_file(filename): """"This function returns the SHA-1 hash of the file passed into it""" # make a hash object h = hashlib.sha1() # open file for reading in binary mode with open(filename,'rb') as file: # loop till the end of the file chunk = 0 while chunk != b'': # read only 1024 bytes at a time chunk = file.read(1024) h.update(chunk) # return the hex representation of digest return h.hexdigest() message = hash_file("track1.mp3") print(message)
输出结果如下:
633d7356947eec543c50b76a1852f92427f4dca9
在这个程序中,我们以二进制模式打开文件。 散列函数在hashlib 模块内,倒入即可。我们使用 while 循环遍历文件直到文件尾部,到达结尾时,得到空字节对象。
在每次迭代中,我们只从文件中读取1024字节(这个值可以根据实际情况修改) ,并更新散列函数。
最后,我们使用 hexdigest()方法以十六进制表示形式返回摘要消息。
相关文章