欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python計(jì)算文件和文本的多種Hash值

 更新時(shí)間:2025年08月22日 08:59:27   作者:小木_.  
這篇文章主要為大家詳細(xì)介紹了如何使用Python計(jì)算文件和文本的多種Hash值,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

本文將使用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)文章

最新評(píng)論