【发布时间】:2015-03-04 14:17:13
【问题描述】:
我正在尝试使用 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 新手,这让我很困惑。
提前致谢。
感谢你们所有的cmets。
我发现了问题,这是我的新代码:
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()
这段代码有效,你们摇滚。 :)
【问题讨论】:
-
是的,因为你得到的哈希是一个空字符串的哈希。阅读文档。您需要初始化哈希:
h.update(some_data). -
您根本没有对文件进行哈希处理。您没有将您选择的文件名传递给 hashlib,因此您正在散列一个空值。我敢打赌哈希是
d41d8cd98f00b204e9800998ecf8427e,这是md5('')会返回的。 -
你说的完全正确!所以我进一步研究了它,幸运的是我发现了一些旧东西。 (在 main 中查找新代码)
标签: python python-3.x hash md5