我正在尝试使用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()
此代码有效,你们摇滚。 :)
答案 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()