from tkinter import *
from tkinter import filedialog, messagebox
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
import base64
class PedoCode:
def __init__(self, root):
self.root = root
self.root.title("PedoCode - Message Cryptography")
self.root.geometry("800x600")
self.root.configure(bg="#F0F0F0")
self.root.resizable(False, False)
self.create_widgets()
def create_widgets(self):
title_label = Label(self.root, text="PedoCode", font=("Arial", 24, "bold"), bg="#F0F0F0")
title_label.pack(pady=20)
input_frame = Frame(self.root, bg="#F0F0F0")
input_frame.pack(pady=10)
input_label = Label(input_frame, text="Input Message:", font=("Arial", 14), bg="#F0F0F0")
input_label.pack(side=LEFT, padx=10)
self.input_text = Text(input_frame, height=5, width=40, font=("Arial", 12))
self.input_text.pack(side=LEFT, padx=10)
output_frame = Frame(self.root, bg="#F0F0F0")
output_frame.pack(pady=10)
output_label = Label(output_frame, text="Output Message:", font=("Arial", 14), bg="#F0F0F0")
output_label.pack(side=LEFT, padx=10)
self.output_text = Text(output_frame, height=5, width=40, font=("Arial", 12))
self.output_text.pack(side=LEFT, padx=10)
password_frame = Frame(self.root, bg="#F0F0F0")
password_frame.pack(pady=10)
password_label = Label(password_frame, text="Password:", font=("Arial", 14), bg="#F0F0F0")
password_label.pack(side=LEFT, padx=10)
self.password_entry = Entry(password_frame, font=("Arial", 12), show="*")
self.password_entry.pack(side=LEFT, padx=10)
button_frame = Frame(self.root, bg="#F0F0F0")
button_frame.pack(pady=20)
encrypt_button = Button(button_frame, text="Encrypt", width=10, font=("Arial", 14), cursor="hand2",
command=self.encrypt)
self.set_button_color(encrypt_button, "#2ca58d")
self.set_button_hover_effects(encrypt_button)
encrypt_button.grid(row=0, column=0, padx=10)
decrypt_button = Button(button_frame, text="Decrypt", width=10, font=("Arial", 14), cursor="hand2",
command=self.decrypt)
self.set_button_color(decrypt_button, "#2ca58d")
self.set_button_hover_effects(decrypt_button)
decrypt_button.grid(row=0, column=1, padx=10)
encrypt_file_button = Button(button_frame, text="Encrypt File", width=13, font=("Arial", 14), cursor="hand2",
command=self.encrypt_file)
self.set_button_color(encrypt_file_button, "#2ca58d")
self.set_button_hover_effects(encrypt_file_button)
encrypt_file_button.grid(row=1, column=0, padx=10)
decrypt_file_button = Button(button_frame, text="Decrypt File", width=13, font=("Arial", 14), cursor="hand2",
command=self.decrypt_file)
self.set_button_color(decrypt_file_button, "#2ca58d")
self.set_button_hover_effects(decrypt_file_button)
decrypt_file_button.grid(row=1, column=1, padx=10)
copy_input_button = Button(button_frame, text="Copy Input", width=13, font=("Arial", 14), cursor="hand2",
command=self.copy_input)
self.set_button_color(copy_input_button, "#2ca58d")
self.set_button_hover_effects(copy_input_button)
copy_input_button.grid(row=2, column=0, padx=10)
copy_output_button = Button(button_frame, text="Copy Output", width=13, font=("Arial", 14), cursor="hand2",
command=self.copy_output)
self.set_button_color(copy_output_button, "#2ca58d")
self.set_button_hover_effects(copy_output_button)
copy_output_button.grid(row=2, column=1, padx=10)
clear_button = Button(button_frame, text="Clear", width=10, font=("Arial", 14), cursor="hand2",
command=self.clear)
self.set_button_color(clear_button, "#2ca58d")
self.set_button_hover_effects(clear_button)
clear_button.grid(row=3, column=0, columnspan=2, pady=10)
def set_button_color(self, button, color):
button.config(bg=color, activebackground=color)
def set_button_hover_effects(self, button):
button.bind("", lambda event: button.config(bg="#26a185"))
button.bind("", lambda event: button.config(bg="#2ca58d"))
def encrypt(self):
password = self.password_entry.get()
if password:
salt = b'PEDOCODE2023'
key = self.generate_key(password, salt)
cipher_suite = Fernet(key)
input_message = self.input_text.get("1.0", END).strip().encode()
encrypted_message = cipher_suite.encrypt(input_message)
self.output_text.delete("1.0", END)
self.output_text.insert(END, encrypted_message.decode())
else:
messagebox.showinfo("Error", "Please enter a password.")
def decrypt(self):
password = self.password_entry.get()
if password:
salt = b'PEDOCODE2023'
key = self.generate_key(password, salt)
cipher_suite = Fernet(key)
input_message = self.input_text.get("1.0", END).strip().encode()
try:
decrypted_message = cipher_suite.decrypt(input_message)
self.output_text.delete("1.0", END)
self.output_text.insert(END, decrypted_message.decode())
except Exception as e:
messagebox.showinfo("Error", "Invalid input or incorrect password.")
else:
messagebox.showinfo("Error", "Please enter a password.")
def encrypt_file(self):
password = self.password_entry.get()
if password:
salt = b'PEDOCODE2023'
key = self.generate_key(password, salt)
cipher_suite = Fernet(key)
file_path = filedialog.askopenfilename(initialdir="/", title="Select File",
filetypes=(("Text Files", "*.txt"), ("All Files", "*.*")))
if file_path:
with open(file_path, 'rb') as file:
file_data = file.read()
encrypted_data = cipher_suite.encrypt(file_data)
encrypted_file_path = file_path + ".encrypted"
with open(encrypted_file_path, 'wb') as encrypted_file:
encrypted_file.write(encrypted_data)
messagebox.showinfo("Success", "File encrypted successfully.")
else:
messagebox.showinfo("Error", "No file selected.")
else:
messagebox.showinfo("Error", "Please enter a password.")
def decrypt_file(self):
password = self.password_entry.get()
if password:
salt = b'PEDOCODE2023'
key = self.generate_key(password, salt)
cipher_suite = Fernet(key)
file_path = filedialog.askopenfilename(initialdir="/", title="Select Encrypted File",
filetypes=(("Encrypted Files", "*.encrypted"), ("All Files", "*.*")))
if file_path:
with open(file_path, 'rb') as file:
file_data = file.read()
try:
decrypted_data = cipher_suite.decrypt(file_data)
decrypted_file_path = file_path[:-10] # Remove the ".encrypted" extension
with open(decrypted_file_path, 'wb') as decrypted_file:
decrypted_file.write(decrypted_data)
messagebox.showinfo("Success", "File decrypted successfully.")
except Exception as e:
messagebox.showinfo("Error", "Invalid file or incorrect password.")
else:
messagebox.showinfo("Error", "No file selected.")
else:
messagebox.showinfo("Error", "Please enter a password.")
def copy_input(self):
input_text = self.input_text.get("1.0", END)
self.root.clipboard_clear()
self.root.clipboard_append(input_text)
messagebox.showinfo("Success", "Input message copied to clipboard.")
def copy_output(self):
output_text = self.output_text.get("1.0", END)
self.root.clipboard_clear()
self.root.clipboard_append(output_text)
messagebox.showinfo("Success", "Output message copied to clipboard.")
def clear(self):
self.input_text.delete("1.0", END)
self.output_text.delete("1.0", END)
self.password_entry.delete(0, END)
def generate_key(self, password, salt):
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
)
key = base64.urlsafe_b64encode(kdf.derive(password.encode()))
return key
if __name__ == "__main__":
root = Tk()
app = PedoCode(root)
root.mainloop()
0 comments: