Python hashlib产生的哈希值与原始哈希值不同

时间:2013-07-04 17:29:57

标签: python hash md5sum

我将这段代码保存为hash.py,当我生成此文件的哈希时,它给我一个与内置完全不同的哈希(使用KUbuntu 13.04),现在为什么会这样?他们都不应该产生相同的结果。我还要提到用于计算巨大文件的哈希值(我在4.5GB iso文件上测试)和内置的md5sum它至少需要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

2 个答案:

答案 0 :(得分:2)

在第一种情况下,您正在散列文件 name ,在第二种情况下,您正在散列文件的内容

答案 1 :(得分: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())是一种不好的做法,因为它无法正确关闭文件。