MD5返回不同的哈希码-Python

网络纺织

我正在尝试确定某些文件的数据一致性。但是,MD5不断变化。当我执行时md5sum,哈希值是相等的:

import hashlib
import os
import sys

def hash_file_content(path):
    try:
        if not os.path.exists(path):
            raise IOError, "File does not exist"
        encode = hashlib.md5(path).hexdigest()
        return encode
    except Exception, e:
        print e

def main():
    hash1 = hash_file_content("./downloads/sample_file_1")
    hash2 = hash_file_content("./samples/sample_file_1")

    print hash1, hash2

if __name__ == "__main__":
   main()

输出意外地不同:

baed6a40f91ee5c44488ecd9a2c6589e 490052e9b1d3994827f4c7859dc127f0

现在带有md5sum

md5sum ./samples/sample_file_1
9655c36a5fdf546f142ffc8b1b9b0d93  ./samples/sample_file_1

md5sum ./downloads/sample_file_1 
9655c36a5fdf546f142ffc8b1b9b0d93  ./downloads/sample_file_1

为什么会发生这种情况,我该如何解决?

没事

在您的代码中,您正在计算md5文件路径的,而不是文件内容的:

...
encode = hashlib.md5(path).hexdigest()
...

而是计算文件内容的md5:

with open(path, "r") as f:
    encode = md5(f.read()).hexdigest()

并且这应该为您提供匹配的输出(即,彼此匹配并且与相同md5sum)。


由于文件很大,因此f.read()一次性执行会增加负担,并且在文件大小超出可用内存时根本无法工作。

因此,可以利用以下事实:在内部,md5使用其update方法来计算块上的哈希,并定义一个使用的方法md5.update,并在代码中对其进行调用,如此答案所述

import hashlib

def md5_for_file(filename, block_size=2**20):
    md5 = hashlib.md5()
    with open(filename, "rb") as f:
        while True:
            data = f.read(block_size)
            if not data:
                break
            md5.update(data)
    return md5.digest()

并立即在您的代码中调用此代码:

encode = md5_for_file(path)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

简单的Python查询-MD5哈希

来自分类Dev

MD5哈希函数在Python中更改数据

来自分类Dev

Python MD5哈希密码和字典

来自分类Dev

php md5 不同于 python

来自分类Dev

Unix md5是否与python的hashlib.md5不同?

来自分类Dev

Python hashlib md5与bash md5sum相比,输出不同且速度较慢?

来自分类Dev

Python脚本是否可以对自身进行md5哈希处理?

来自分类Dev

比较python中两个文件的md5哈希值

来自分类Dev

任何UNC文件的Python hashlib MD5摘要始终会产生相同的哈希值

来自分类Dev

如何在Python 2.6的MD5哈希中使用字节数组?

来自分类Dev

我需要帮助来了解python 3.4.3的md5哈希

来自分类Dev

在python中计算出的文件的md5哈希不正确

来自分类Dev

python3.2 - 错误:root:未找到哈希 md5 的代码

来自分类Dev

MD5哈希值不同

来自分类Dev

PHP crypt()-返回的md5哈希

来自分类Dev

如果使用中文字符,为什么php md5()与python的hash.md5()总是不同?

来自分类Dev

如果使用中文字符,为什么php md5()与python的hash.md5()总是不同?

来自分类Dev

R中的MD5文件哈希函数返回不同的值?

来自分类Dev

Openstack Python SDK-Glance不返回图像MD5

来自分类Dev

为什么在字符串上md5哈希比在python中的numpy数组上快得多?

来自分类Dev

如何获取文件夹中的所有文件并在python中获取其MD5哈希?

来自分类Dev

如何在python中将md5 32字节哈希转换为相应的sha256

来自分类Dev

MD5 Python蛮力错误

来自分类Dev

用Python计算Hex的MD5

来自分类Dev

linux和python中的md5

来自分类Dev

用Python计算Hex的MD5

来自分类Dev

MD5 Python蛮力错误

来自分类Dev

NodeJS使用crypo计算MD5哈希的结果不同

来自分类Dev

MD5哈希转换

Related 相关文章

热门标签

归档