本文将使用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值的资料请关注代码网其它相关文章!
发表评论