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

标签 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()

这段代码有效,你们太棒了。 :)

最佳答案

在你的例子中,你做了空字符串的摘要,你可能会得到: 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/

相关文章:

python - 导入 Apex 时出现 `UnencryptedCookieSessionFactoryConfig` 错误

python - 如果 x 轴是 Pandas 的日期时间索引,如何绘制多色线

javascript - 使用 JavaScript 对 HTML 中的 Python/Flask 动态呈现的表进行排序

c++ - C++中的Java hashCode()等效项

ruby - Ruby 哈希上的多字符串元素排序,第一个键降序,第二个键升序

c++ - 为模板化 key 专门化 std::hash

python - 将键和值附加到键值对字典 Python

python - 在命令行解释器中轻松切换 Python 版本?

python - 如何递归获取 python 包中的所有子模块?

python - 如何判断指定的文件是否位于指定的文件夹内?