Python:使用Hashlib生成文件的MD5哈希

时间:2015-03-04 14:17:14

标签: python python-3.x hash md5

我正在尝试使用Tkinter模块中的hashlib生成文件的哈希值。 我的目标:

步骤1: - 按钮(单击),打开浏览器(单击要散列的文件)。 步骤2: - 选择文件后,选择输出文件(.txt),其中哈希将被打印'。 第3步: - 重复并且没有冲突。

from tkinter.filedialog import askopenfilename
import hashlib

def hashing():
    hash = askopenfilename(title="Select file for Hashing")
    savename = askopenfilename(title="Select output")
    outputhash = open(savename, "w")
    hash1 = open(hash, "r")
    h = hashlib.md5()
    print(h.hexdigest(), file=outputhash)
    love.flush()

它起作用'在某种程度上,它允许选择输入文件和输出文件。它将哈希打印到输出文件中。

但是 - 如果我选择任何不同的文件,我每次都会得到相同的哈希值。

我是Python新手,它真的让我感到难过。

提前致谢。


感谢您的所有评论。

我想出了问题,这是我的新代码:

from tkinter.filedialog import askopenfilename
import hashlib

def hashing():
    hash = askopenfilename(title="Select file for Hashing")
    savename = askopenfilename(title="Select output")
    outputhash = open(savename, "w")
    curfile = open(hash, "rb")
    hasher = hashlib.md5()
    buf = curfile.read()
    hasher.update(buf)
    print(hasher.hexdigest(), file=outputhash)
    outputhash.flush()

此代码有效,你们摇滚。 :)

2 个答案:

答案 0 :(得分:3)

在你的情况下,你做空字符串的摘要,可能你得到: d41d8cd98f00b204e9800998ecf8427e

我使用这种方法来消化,对大文件更好(参见here)。

   md5 = hashlib.md5()
   with open(File, "rb") as f:
       for block in iter(lambda: f.read(128), ""):
           md5.update(block)
   print(md5.hexdigest())

答案 1 :(得分:1)

一种非常简单的方式

from hashlib import md5

f=open("file.txt","r")
data=f.read()
f.close()
Hash=md5(data).hexdigest()
out=open("out.txt","w")
out.write(Hash)
out.close()