-
Notifications
You must be signed in to change notification settings - Fork 27
Description
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
from cryptography.fernet import Fernet, InvalidSignature
import os
import time
import shutil
import getpass # For secure password input
def encrypt_files(folder_path, key):
"""Encrypts files in the specified folder using the encryption key."""
f = Fernet(key)
for root, _, files in os.walk(folder_path):
for file in files:
filename = os.path.join(root, file)
try:
with open(filename, 'rb') as file_to_encrypt:
data = file_to_encrypt.read()
encrypted_data = f.encrypt(data)
with open(filename, 'wb') as encrypted_file:
encrypted_file.write(encrypted_data)
except (IOError, OSError, InvalidSignature) as e:
messagebox.showerror("Error", f"Error processing file {filename}: {e}")
def decrypt_files(folder_path, key):
"""Decrypts files in the specified folder using the encryption key."""
f = Fernet(key)
for root, _, files in os.walk(folder_path):
for file in files:
filename = os.path.join(root, file)
try:
with open(filename, 'rb') as file_to_decrypt:
encrypted_data = file_to_decrypt.read()
decrypted_data = f.decrypt(encrypted_data)
with open(filename, 'wb') as decrypted_file:
decrypted_file.write(decrypted_data)
except (IOError, OSError, InvalidSignature) as e:
messagebox.showerror("Error", f"Error processing file {filename}: {e}")
def scan_for_threats():
messagebox.showinfo("Scan", "System scan functionality is not yet implemented.")
def backup_files(source_path):
"""Creates a backup of files."""
if not source_path:
messagebox.showerror("Error", "Please specify a source folder.")
return
backup_path = os.path.join(source_path, f"backup_{time.strftime('%Y%m%d_%H%M%S')}")
try:
shutil.copytree(source_path, backup_path)
messagebox.showinfo("Backup", f"Backup created at: {backup_path}")
except (IOError, OSError) as e:
messagebox.showerror("Error", f"Backup failed: {e}")
def schedule_tasks():
messagebox.showinfo("Schedule", "Task scheduling functionality is not yet implemented.")
def manage_website():
messagebox.showinfo("Website", "Website management functionality is not yet implemented.")
def generate_key():
"""Generates a new encryption key."""
key = Fernet.generate_key()
key_entry.delete(0, tk.END)
key_entry.insert(0, key.decode()) # Decode for display in entry
def encrypt_data():
folder_path = folder_path_entry.get()
key = key_entry.get().encode()
if not folder_path or not key:
messagebox.showerror("Error", "Please specify a folder path and encryption key.")
return
encrypt_files(folder_path, key)
messagebox.showinfo("Encryption", "Data encrypted successfully.")
def decrypt_data():
folder_path = folder_path_entry.get()
key = key_entry.get().encode()
if not folder_path or not key:
messagebox.showerror("Error", "Please specify a folder path and encryption key.")
return
decrypt_files(folder_path, key)
messagebox.showinfo("Decryption", "Data decrypted successfully.")
Tkinter GUI
window = tk.Tk()
window.title("Data Protection Program")
folder_path_label = ttk.Label(window, text="Folder Path:")
folder_path_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
folder_path_entry = ttk.Entry(window, width=30)
folder_path_entry.grid(row=0, column=1, padx=5, pady=5)
key_label = ttk.Label(window, text="Encryption Key:")
key_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
key_entry = ttk.Entry(window, width=30, show="*") # Hide key characters
key_entry.grid(row=1, column=1, padx=5, pady=5)
generate_key_button = ttk.Button(window, text="Generate Key", command=generate_key)
generate_key_button.grid(row=2, column=0, padx=5, pady=5)
encrypt_button = ttk.Button(window, text="Encrypt", command=encrypt_data)
encrypt_button.grid(row=2, column=1, padx=5, pady=5)
decrypt_button = ttk.Button(window, text="Decrypt", command=decrypt_data)
decrypt_button.grid(row=3, column=1, padx=5, pady=5)
scan_button = ttk.Button(window, text="Scan System", command=scan_for_threats)
scan_button.grid(row=3, column=0, padx=5, pady=5)
backup_button = ttk.Button(window, text="Backup Files", command=lambda: backup_files(folder_path_entry.get()))
backup_button.grid(row=4, column=0, padx=5, pady=5)
schedule_button = ttk.Button(window, text="Schedule Tasks", command=schedule_tasks)
schedule_button.grid(row=4, column=1, padx=5, pady=5)
manage_website_button = ttk.Button(window, text="Manage Website", command=manage_website)
manage_website_button.grid(row=5, column=0, columnspan=2, padx=5, pady=5)
window.mainloop()