簡體   English   中英

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

[英]Python: Generating a MD5 Hash of a file using Hashlib

我正在嘗試在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

我用這種方法來消化,這對於大文件來說更好(請參閱此處 )。

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

一個非常簡單的方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM