我将这段代码保存为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
答案 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())
是一种不好的做法,因为它无法正确关闭文件。