本文将使用python编写的gui应用,具备文件拖拽功能,能够计算文件和文本的多种hash值,包括md5、sha1、sha224、sha256、sha384、sha512以及crc32。
具体界面效果如下

导入模块
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计算') # 程序的标题名称
root.geometry("580x400+512+288") # 窗口的大小及页面的显示位置
root.resizable(false, false) # 固定页面不可放大缩小
root.iconbitmap("picture.ico") # 程序的图标为界面添加图片及要拖拽框架的指向位置
canvas = tkinter.canvas(root, bg="#ebebeb", height=400, width=700, borderwidth=-3) # 创建画布
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)
用来转换文件hash
# 文件转换
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) # 这里就是每次读文件放进内存的大小,小心溢出!
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 # 返回的是十进制的值
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 ↓↓↓值转换完毕↓↓↓\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"[转换失败!!!]\n----↓↓↓----\n{msg}\n----↑↑↑----\t \n\n")
用来转换文本hash
# 文本转换
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) # 背景
运行: 我已经打包过了

完整代码:
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计算') # 程序的标题名称
root.geometry("580x400+512+288") # 窗口的大小及页面的显示位置
root.resizable(false, false) # 固定页面不可放大缩小
root.iconbitmap("picture.ico") # 程序的图标
canvas = tkinter.canvas(root, bg="#ebebeb", height=400, width=700, borderwidth=-3) # 创建画布
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)
# 文件转换
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) # 这里就是每次读文件放进内存的大小,小心溢出!
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 # 返回的是十进制的值
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 ↓↓↓值转换完毕↓↓↓\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"[转换失败!!!]\n----↓↓↓----\n{msg}\n----↑↑↑----\t \n\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", '输入要转换的文字字符串,输入之前别忘了清空!!')
button(root, text='hash转换',command=hash_s).place(x=170, y=184)
root.mainloop()以上就是使用python计算文件和文本的多种hash值的详细内容,更多关于python计算hash值的资料请关注代码网其它相关文章!
发表评论