Skip to main content
 首页 » 编程设计

Python比较md5哈希

2025年05月04日16dyllove98

我正在使用我在 stackoverflow 上找到的以下代码,它建议是获取文本文件内容的 md5 哈希值并与我从 http://www.miraclesalad.com/webtools/md5.php 获得的生成的 md5 哈希值进行比较的有效方法。

但是.. 它没有返回相同的 md5 散列,我不确定我哪里出错了。文件内容与我用来生成 md5 哈希的文本完全匹配,因此它应该匹配,但它没有返回相同的匹配。

基本上,我想生成一些文本的 md5 哈希并将其与文本文件的内容进行比较,看它是否匹配。

def md5Checksum(filePath): 
    with open(filePath, 'rb') as fh: 
        m = hashlib.md5() 
        while True: 
            data = fh.read(8192) 
            if not data: 
                break 
            m.update(data) 
        return m.hexdigest() 

如果我创建一个内容为“test”的文本文件,然后转到http://www.miraclesalad.com/webtools/md5.php并输入“test”并生成一个哈希值,然后比较它们是否不同。

无论文件内容如何,​​我返回的散列始终相同。

比较散列的代码

filetext = 'LOCATIONTOFILE.txt' 
filemd5 = '098f6bcd4621d373cade4e832627b4f6' 
if not filemd5 == md5Checksum(filetxt): 

我试过打印数据,两个数据也完全一样。

来自网站的 test 哈希:098f6bcd4621d373cade4e832627b4f6

内容为test d41d8cd98f00b204e9800998ecf8427e的文本文件哈希

更新

感谢 Adam Smith 解决了这个问题。

这是一个识别错误,因此没有返回更新后的 hashlib。

请您参考如下方法:

在 Windows 上,我做了以下重现。

C:\Users\adsmith\tmp>echo test>test.txt 

然后在 Python 中:

>>> import hashlib 
>>> a = hashlib.md5() 
>>> b = hashlib.md5() 
>>> with open("test.txt", "rb") as fh: 
...     data = fh.read() 
...     a.update(data) 
... 
>>> with open("test.txt", "rb") as fh: 
...     data = fh.read().strip() 
...     b.update(data) 
... 
>>> print(a.hexdigest(), "\n", b.hexdigest()) 
'9f06243abcb89c70e0c331c61d871fa7'  # from b'test\r\n' 
'098f6bcd4621d373cade4e832627b4f6'  # from b'test' 

问题显然是由文件中的行终止符引起的。这也应该是一个警告,除非你必须这样做,否则不要使用像 file.read(bytecount) 这样的低级结构!

>>> open("test.txt", 'rb').read() 
# b'test\r\n'