使用Python計(jì)算文件和文本的多種Hash值
本文將使用Python編寫的GUI應(yīng)用,具備文件拖拽功能,能夠計(jì)算文件和文本的多種Hash值,包括MD5、SHA1、SHA224、SHA256、SHA384、SHA512以及CRC32。
具體界面效果如下

導(dǎo)入模塊
import tkinter from tkinter import * import tkinter as tk from tkinter.ttk import * import tkinter.filedialog import pyperclip import windnd import hashlib import sys import zlib
簡單框架
root = Tk()
root.title('賤工坊-Hash計(jì)算') # 程序的標(biāo)題名稱
root.geometry("580x400+512+288") # 窗口的大小及頁面的顯示位置
root.resizable(False, False) # 固定頁面不可放大縮小
root.iconbitmap("picture.ico") # 程序的圖標(biāo)為界面添加圖片及要拖拽框架的指向位置
canvas = tkinter.Canvas(root, bg="#ebebeb", height=400, width=700, borderwidth=-3) # 創(chuàng)建畫布
canvas.pack(side='top') # 放置畫布(為上端)
try:
image_file = tkinter.PhotoImage(file="./Along.png") # 加載圖片文件
canvas.create_image(0, 0, anchor='nw', image=image_file) # 將圖片置于畫布上
except:
pass
photo = PhotoImage(file="./ZCY.png")
theLabel = Label(root,image=photo)
theLabel.place(x=450,y=20)多行文本框,一個(gè)是輸入,一個(gè)是輸出
ScrolledText = Text(root, width=60, height=12) ScrolledText.place(x=1,y=1) ScrolledText_file = Text(root, width=60, height=12) ScrolledText_file.place(x=1,y=236)
用來轉(zhuǎn)換文件hash
# 文件轉(zhuǎn)換
def file(files):
ScrolledText_file.delete(0.0, END)
msg = '\n'.join((item.decode('gbk') for item in files))
try:
# md5值
def file(filete):
with open(filete, 'rb') as fd:
md5obj = hashlib.md5()
md5obj.update(fd.read())
hashv1 = md5obj.hexdigest()
return hashv1
# sha1值
def JMSHA1(filete):
sha1jiami = hashlib.sha1()
try:
a = open(fr'{filete}', 'rb')
except:
print('文件路徑有誤,請輸入正確路徑!')
return 0
while True:
b = a.read(128000) # 這里就是每次讀文件放進(jìn)內(nèi)存的大小,小心溢出!
sha1jiami.update(b)
if not b:
break
a.close()
jiamijieguo = sha1jiami.hexdigest()
return jiamijieguo
# sha224值
def CalcFileSha224(filete):
with open(filete, "rb") as f:
# sha224
sha224obj = hashlib.sha224()
sha224obj.update(f.read())
hash_value_224 = sha224obj.hexdigest()
return hash_value_224
# sha256值
def CalcFileSha256(filete):
with open(filete, "rb") as f:
sha256obj = hashlib.sha256()
sha256obj.update(f.read())
hash_value = sha256obj.hexdigest()
return hash_value
# sha384值
def CalcFileSha384(filete):
with open(filete, "rb") as f:
# sha384
sha384obj = hashlib.sha384()
sha384obj.update(f.read())
hash_value_384 = sha384obj.hexdigest()
return hash_value_384
# sha512值
def CalcFileSha512(filete):
with open(filete, "rb") as f:
# sha512
sha512obj = hashlib.sha512()
sha512obj.update(f.read())
hash_value_512 = sha512obj.hexdigest()
return hash_value_512
# CRC值
def crc32(filete):
block_size = 1024 * 1024
crc = 0
try:
fd = open(filete, 'rb')
while True:
buffer = fd.read(block_size)
if len(buffer) == 0: # EOF or file empty. return hashes
fd.close()
if sys.version_info[0] < 3 and crc < 0:
crc += 2 ** 32
return crc # 返回的是十進(jìn)制的值
crc = zlib.crc32(buffer, crc)
except Exception as e:
if sys.version_info[0] < 3:
error = str(e)
pass
else:
error = str(e)
return 0, error
ScrolledText_file.insert("end",
f"************ ************\n{msg}\n\t\t ↓↓↓值轉(zhuǎn)換完畢↓↓↓\nMD5值:\n{file(msg)}\n\nsha1值:\n{JMSHA1(msg)}\n\nsha224值:\n{CalcFileSha224(msg)}\n\nsha256值:\n{CalcFileSha256(msg)}\n\nsha384值:\n{CalcFileSha384(msg)}\n\nsha512值:\n{CalcFileSha512(msg)}\n\ncrc32值:\n{hex(crc32(msg))}\n************ ************\n\n")
except:
ScrolledText_file.insert("end", f"[轉(zhuǎn)換失?。。?!]\n----↓↓↓----\n{msg}\n----↑↑↑----\t \n\n")
用來轉(zhuǎn)換文本hash
# 文本轉(zhuǎn)換
def hash_s():
MD5 = ScrolledText.get(1.0, END).strip().replace("\n", "").encode()
ScrolledText_file.delete(0.0, END)
#MD5
md5obj = hashlib.md5()
md5obj.update(MD5)
hashv1 = md5obj.hexdigest()
#sh1
SH1 = ScrolledText.get(1.0, END).strip()
hash_sha1 = hashlib.sha1(SH1.encode('utf8')).hexdigest()
# sha224
sha224obj = hashlib.sha224()
sha224obj.update(MD5)
hash_value_224 = sha224obj.hexdigest()
#sha256
sha256obj = hashlib.sha256()
sha256obj.update(MD5)
hash_value = sha256obj.hexdigest()
# sha384
sha384obj = hashlib.sha384()
sha384obj.update(MD5)
hash_value_384 = sha384obj.hexdigest()
# sha512
sha512obj = hashlib.sha512()
sha512obj.update(MD5)
hash_value_512 = sha512obj.hexdigest()
# blake2b
blake2b = hashlib.blake2b()
blake2b.update(MD5)
hash_value_blake2b = blake2b.hexdigest()
# blake2s
blake2s = hashlib.blake2s()
blake2s.update(MD5)
hash_value_blake2s = blake2s.hexdigest()
ScrolledText_file.insert("end", 'MD5值:' + hashv1+'\n\nsha1值:'+hash_sha1+'\n\nsha224值:'+hash_value_224+'\n\nsha256值:'+hash_value+'\n\nsha384值:'+hash_value_384+'\n\nsha512值:'+hash_value_512)
ScrolledText_file.insert("end", '\n\nblake2b值:' + hash_value_blake2b+'\n\nblake2s值:' + hash_value_blake2s)文件拖拽的核心
windnd.hook_dropfiles(theLabel, func=file) # 背景
運(yùn)行: 我已經(jīng)打包過了

完整代碼:
import tkinter
from tkinter import *
import tkinter as tk
from tkinter.ttk import *
import tkinter.filedialog
import pyperclip
import windnd
import hashlib #加密
import sys
import zlib
root = Tk()
root.title('賤工坊-Hash計(jì)算') # 程序的標(biāo)題名稱
root.geometry("580x400+512+288") # 窗口的大小及頁面的顯示位置
root.resizable(False, False) # 固定頁面不可放大縮小
root.iconbitmap("picture.ico") # 程序的圖標(biāo)
canvas = tkinter.Canvas(root, bg="#ebebeb", height=400, width=700, borderwidth=-3) # 創(chuàng)建畫布
canvas.pack(side='top') # 放置畫布(為上端)
try:
image_file = tkinter.PhotoImage(file="./Along.png") # 加載圖片文件
canvas.create_image(0, 0, anchor='nw', image=image_file) # 將圖片置于畫布上
except:
pass
photo = PhotoImage(file="./ZCY.png")
theLabel = Label(root,image=photo)
theLabel.place(x=450,y=20)
ScrolledText = Text(root, width=60, height=12)
ScrolledText.place(x=1,y=1)
ScrolledText_file = Text(root, width=60, height=12)
ScrolledText_file.place(x=1,y=236)
# 文件轉(zhuǎn)換
def file(files):
ScrolledText_file.delete(0.0, END)
msg = '\n'.join((item.decode('gbk') for item in files))
try:
# md5值
def file(filete):
with open(filete, 'rb') as fd:
md5obj = hashlib.md5()
md5obj.update(fd.read())
hashv1 = md5obj.hexdigest()
return hashv1
# sha1值
def JMSHA1(filete):
sha1jiami = hashlib.sha1()
try:
a = open(fr'{filete}', 'rb')
except:
print('文件路徑有誤,請輸入正確路徑!')
return 0
while True:
b = a.read(128000) # 這里就是每次讀文件放進(jìn)內(nèi)存的大小,小心溢出!
sha1jiami.update(b)
if not b:
break
a.close()
jiamijieguo = sha1jiami.hexdigest()
return jiamijieguo
# sha224值
def CalcFileSha224(filete):
with open(filete, "rb") as f:
# sha224
sha224obj = hashlib.sha224()
sha224obj.update(f.read())
hash_value_224 = sha224obj.hexdigest()
return hash_value_224
# sha256值
def CalcFileSha256(filete):
with open(filete, "rb") as f:
sha256obj = hashlib.sha256()
sha256obj.update(f.read())
hash_value = sha256obj.hexdigest()
return hash_value
# sha384值
def CalcFileSha384(filete):
with open(filete, "rb") as f:
# sha384
sha384obj = hashlib.sha384()
sha384obj.update(f.read())
hash_value_384 = sha384obj.hexdigest()
return hash_value_384
# sha512值
def CalcFileSha512(filete):
with open(filete, "rb") as f:
# sha512
sha512obj = hashlib.sha512()
sha512obj.update(f.read())
hash_value_512 = sha512obj.hexdigest()
return hash_value_512
# CRC值
def crc32(filete):
block_size = 1024 * 1024
crc = 0
try:
fd = open(filete, 'rb')
while True:
buffer = fd.read(block_size)
if len(buffer) == 0: # EOF or file empty. return hashes
fd.close()
if sys.version_info[0] < 3 and crc < 0:
crc += 2 ** 32
return crc # 返回的是十進(jìn)制的值
crc = zlib.crc32(buffer, crc)
except Exception as e:
if sys.version_info[0] < 3:
error = str(e)
pass
else:
error = str(e)
return 0, error
ScrolledText_file.insert("end",
f"************ ************\n{msg}\n\t\t ↓↓↓值轉(zhuǎn)換完畢↓↓↓\nMD5值:\n{file(msg)}\n\nsha1值:\n{JMSHA1(msg)}\n\nsha224值:\n{CalcFileSha224(msg)}\n\nsha256值:\n{CalcFileSha256(msg)}\n\nsha384值:\n{CalcFileSha384(msg)}\n\nsha512值:\n{CalcFileSha512(msg)}\n\ncrc32值:\n{hex(crc32(msg))}\n************ ************\n\n")
except:
ScrolledText_file.insert("end", f"[轉(zhuǎn)換失?。。?!]\n----↓↓↓----\n{msg}\n----↑↑↑----\t \n\n")
# 文本轉(zhuǎn)換
def hash_s():
MD5 = ScrolledText.get(1.0, END).strip().replace("\n", "").encode()
ScrolledText_file.delete(0.0, END)
#MD5
md5obj = hashlib.md5()
md5obj.update(MD5)
hashv1 = md5obj.hexdigest()
#sh1
SH1 = ScrolledText.get(1.0, END).strip()
hash_sha1 = hashlib.sha1(SH1.encode('utf8')).hexdigest()
# sha224
sha224obj = hashlib.sha224()
sha224obj.update(MD5)
hash_value_224 = sha224obj.hexdigest()
#sha256
sha256obj = hashlib.sha256()
sha256obj.update(MD5)
hash_value = sha256obj.hexdigest()
# sha384
sha384obj = hashlib.sha384()
sha384obj.update(MD5)
hash_value_384 = sha384obj.hexdigest()
# sha512
sha512obj = hashlib.sha512()
sha512obj.update(MD5)
hash_value_512 = sha512obj.hexdigest()
# blake2b
blake2b = hashlib.blake2b()
blake2b.update(MD5)
hash_value_blake2b = blake2b.hexdigest()
# blake2s
blake2s = hashlib.blake2s()
blake2s.update(MD5)
hash_value_blake2s = blake2s.hexdigest()
ScrolledText_file.insert("end", 'MD5值:' + hashv1+'\n\nsha1值:'+hash_sha1+'\n\nsha224值:'+hash_value_224+'\n\nsha256值:'+hash_value+'\n\nsha384值:'+hash_value_384+'\n\nsha512值:'+hash_value_512)
ScrolledText_file.insert("end", '\n\nblake2b值:' + hash_value_blake2b+'\n\nblake2s值:' + hash_value_blake2s)
windnd.hook_dropfiles(theLabel, func=file) # 背景
ScrolledText.insert("end", '輸入要轉(zhuǎn)換的文字字符串,輸入之前別忘了清空!!')
Button(root, text='hash轉(zhuǎn)換',command=hash_s).place(x=170, y=184)
root.mainloop()以上就是使用Python計(jì)算文件和文本的多種Hash值的詳細(xì)內(nèi)容,更多關(guān)于Python計(jì)算Hash值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
UI自動(dòng)化定位常用實(shí)現(xiàn)方法代碼示例
這篇文章主要介紹了UI自動(dòng)化定位常用實(shí)現(xiàn)方法代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
詳解Python如何實(shí)現(xiàn)對(duì)比兩個(gè)Excel數(shù)據(jù)差異
這篇文章主要為大家詳細(xì)介紹了Python是如何實(shí)現(xiàn)對(duì)比兩個(gè)Excel數(shù)據(jù)差異的,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-12-12
python GUI庫圖形界面開發(fā)之PyQt5控件QTableWidget詳細(xì)使用方法與屬性
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5控件QTableWidget詳細(xì)使用方法與屬性,需要的朋友可以參考下2020-02-02
python基礎(chǔ)教程之對(duì)象和類的實(shí)際運(yùn)用
這篇文章主要介紹了python基礎(chǔ)教程之對(duì)象和類的實(shí)際運(yùn)用,本文講解對(duì)象和類的一方法技巧,例如屬性、內(nèi)置方法、self關(guān)鍵字的運(yùn)用等,需要的朋友可以參考下2014-08-08
舉例講解Python中的算數(shù)運(yùn)算符的用法
這篇文章主要介紹了舉例講解Python中的算數(shù)運(yùn)算符的用法,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
python web.py開發(fā)httpserver解決跨域問題實(shí)例解析
這篇文章主要介紹了python web.py開發(fā)httpserver解決跨域問題實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
一小時(shí)學(xué)會(huì)TensorFlow2之Fashion Mnist
這篇文章主要介紹了TensorFlow2之Fashion Mnist,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

