我正在尝试使用 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()
这段代码有效,你们太棒了。 :)
最佳答案
在你的例子中,你做了空字符串的摘要,你可能会得到: 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())
关于Python:使用 Hashlib 生成文件的 MD5 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28856737/