0

我保存了这段代码hash.py,当我生成这个文件的哈希时,它给了我一个与内置(使用 KUbuntu 13.04)完全不同的哈希,现在为什么会这样?他们不是都应该产生相同的结果。我还必须提到,使用内置 md5sum 计算大文件的哈希值(我在 4.5GB iso 文件上测试)至少需要 7 秒,但这个 python 文件几乎是即时的

""" filename: hash.py """
import sys
import hashlib
file_name = sys.argv[0]
hash_obj = hashlib.md5(file_name)
print "MD5 - "+ hash_obj.hexdigest()

输出:

meow@VikkyHacks:~/Arena/py$ python hash.py 
MD5 - d18a4085140ad0c8ee7671d8ba2065fc

内置默认命令的输出:

meow@VikkyHacks:~/Arena/py$ md5sum hash.py 
5299f3588cb0de6cf27930181be73e80  hash.py
4

2 回答 2

2

在第一种情况下,您正在对文件进行哈希处理,在第二种情况下,您正在对文件的内容进行哈希处理。

于 2013-07-04T17:31:36.463 回答
1

您正在从中提取文件路径sys.argv[0]并计算其 md5(即路径的 md5 作为字符串)。要计算文件内容的 md5,请使用:

import sys
import hashlib

file_path = sys.argv[0]
with open(file_path, 'rb') as file_handle:
    file_contents = file_handle.read()
    print('MD5 - ' + hashlib.md5(file_contents).hexdigest())

编辑

使用hashlib.md5(open(file_name, 'rb').read())是一种不好的做法,因为它不能正确关闭文件。

于 2013-07-04T18:04:20.150 回答