Středa , 25 Červen 2025
Domů Programování Python GUI šifrovací a dešifrovací program
ProgramováníPython

Python GUI šifrovací a dešifrovací program

blank
blank

Tento program je jednoduchá aplikace vytvořená pomocí Pythonu a frameworku Tkinter pro grafické uživatelské rozhraní. Slouží k šifrování a dešifrování textových souborů pomocí symetrického šifrování Fernet, které je součástí knihovny cryptography v Pythonu.


Funkce programu:
Generování a vkládání klíče: Uživatel může do programu vložit klíč pro šifrování a dešifrování. Program také umožňuje generovat bezpečný náhodný klíč pomocí tlačítka „Generovat klíč“.

Šifrování textu: Uživatel napíše nebo vloží text do textového pole a stiskne tlačítko ‚Uložit‘. Program poté zašifruje text a uloží ho do souboru s příponou .enc.

Dešifrování textu: Uživatel stiskne tlačítko ‚Otevřít‘ a vybere zašifrovaný soubor. Program poté dešifruje text a zobrazí ho v textovém poli.

Ošetření chyb: Pokud dojde k chybě při šifrování nebo dešifrování, mimo jiné kvůli chybnému klíči, program zobrazí chybovou zprávu.

Celkově program nabízí jednoduchý ale bezpečný způsob, jak šifrovat a dešifrovat textové soubory pomocí pevně daného nebo náhodně vygenerovaného klíče.

				
					import tkinter as tk
from tkinter import filedialog, messagebox
from cryptography.fernet import Fernet, InvalidToken
import re

def save_encrypted_file():
    key = key_entry.get()
    if not re.match('^[a-zA-Z0-9_-]+={0,2}$', key) or len(key) != 44:
        messagebox.showerror("Invalid key", "The key should be a 32 url-safe base64-encoded bytes string.")
        return
    cipher_suite = Fernet(key)

    file_path = filedialog.asksaveasfilename(defaultextension=".enc")
    if file_path:
        text = text_area.get('1.0', 'end-1c')
        encrypted_text = cipher_suite.encrypt(text.encode())

        with open(file_path, 'wb') as f_out:
            f_out.write(encrypted_text)

def generate_key():
    key = Fernet.generate_key().decode('utf-8')
    key_entry.delete(0, tk.END)
    key_entry.insert(0, key)

def open_encrypted_file():
    key = key_entry.get()
    if not re.match('^[a-zA-Z0-9_-]+={0,2}$', key) or len(key) != 44:
        messagebox.showerror("Invalid key", "The key should be a 32 url-safe base64-encoded bytes string.")
        return
    cipher_suite = Fernet(key)

    file_path = filedialog.askopenfilename(filetypes=[('Encrypted Files', '*.enc')])
    if file_path:
        with open(file_path, 'rb') as f_in:
            encrypted_text = f_in.read()

        try:
            decrypted_text = cipher_suite.decrypt(encrypted_text).decode()
            text_area.delete('1.0', tk.END)
            text_area.insert(tk.END, decrypted_text)
        except InvalidToken:
            tk.messagebox.showerror("Decryption Error", "Cannot decrypt the data, Invalid Token.")

root = tk.Tk()

menu_bar = tk.Menu(root)
file_menu = tk.Menu(menu_bar)
file_menu.add_command(label='Open', command=open_encrypted_file)
file_menu.add_command(label='Save', command=save_encrypted_file)
menu_bar.add_cascade(label='File', menu=file_menu)

key_label = tk.Label(root, text='Encryption key')
key_label.pack()

key_entry = tk.Entry(root)
key_entry.pack()

generate_button = tk.Button(root, text="Generate Key", command=generate_key)
generate_button.pack()

text_area = tk.Text(root)
text_area.pack(expand=True, fill='both')

root.config(menu=menu_bar)
root.mainloop()
				
			

Ukázka spuštěného programu:

blank

Zanechte komentář

Napsat komentář

Související články

blank
ProgramováníStrojové učeníUmělá inteligence

Neuromorfní čipy vs. GPU/TPU

Top články Neuromorfní čipy vs. GPU/TPU 19. 6. 2025 Edge-AI v IoT:...

blank
PythonTensorFlow.js

🐍 Úvod do TensorFlow Lite & Python

TensorFlow Lite (TFLite) ve spojení s Pythonem otevírá dveře on-device strojovému učení...

blank
Python

Detekční systém v Pythonu s GPU akcelerací

Desktop Motion Detection s GPU akcelerací🎯 Účel programuTento nástroj sleduje vybrané okno...

blank
PythonYouTube videa

Python generátor náhledového obrázku YouTube videa

import re import os import requests import argparse from urllib.parse import urlparse,...