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: