【问题标题】:Pythons hashlib producing different hash value than the original hashPythons hashlib 产生与原始哈希不同的哈希值
【发布时间】:2013-07-05 02:04:20
【问题描述】:

我将这段代码保存为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

【问题讨论】:

    标签: python hash md5sum


    【解决方案1】:

    第一种情况是散列文件name,第二种情况是散列文件的内容

    【讨论】:

    • 很抱歉第一次没有放代码,我正在尝试通过传递argv[0]并将hash.py的内容传递给md5sum来散列相同的源文件内容
    • @vikkihacks:要计算 contents 的 md5sum,请使用 hashlib.md5(open(file_name, 'rb').read())
    【解决方案2】:

    您正在从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()) 是一种不好的做法,因为它不能正确关闭文件。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 2011-05-27
      • 1970-01-01
      • 2018-10-23
      相关资源
      最近更新 更多