计算文件Hash值(散列)的 Python 程序

2022-05-03 00:00:00 程序 文件 计算

在本文中,您将学习如何查找文件的散列并显示它。
为了理解这个例子,你应该了解下面的 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()方法以十六进制表示形式返回摘要消息。

相关文章