Skip to content
This repository was archived by the owner on May 18, 2025. It is now read-only.

Commit d54d724

Browse files
authored
Create main.py
1 parent da81627 commit d54d724

File tree

1 file changed

+156
-0
lines changed

1 file changed

+156
-0
lines changed

main.py

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
import tkinter as tk
2+
from tkinter import filedialog, messagebox
3+
from cryptography.fernet import Fernet
4+
import os
5+
6+
# START DONATION CODE
7+
from tkinter import messagebox
8+
from random import randint
9+
import sys
10+
11+
12+
#if randint(0,3) == 1 and not "--no-popup" in sys.argv:
13+
# messagebox.showinfo("BirdOffice 24.11", "Thank you for downloading BirdEncrypt! If you like this software, make sure to donate at www.mojavesoft.net/donate/!")
14+
15+
16+
# END DONATION CODE
17+
18+
def generate_key():
19+
key = Fernet.generate_key()
20+
key_entry.delete(0, tk.END)
21+
key_entry.insert(0, key.decode())
22+
log_message("Key generated in memory.")
23+
24+
def load_key():
25+
try:
26+
key_path = filedialog.askopenfilename(title="Select Key File", filetypes=[("Key Files", "*.key")])
27+
with open(key_path, "rb") as key_file:
28+
key = key_file.read()
29+
key_entry.delete(0, tk.END)
30+
key_entry.insert(0, key.decode())
31+
log_message("Key loaded successfully.")
32+
except Exception as e:
33+
log_message(f"Error loading key: {e}")
34+
35+
def save_key():
36+
try:
37+
key = key_entry.get().encode()
38+
key_path = filedialog.asksaveasfilename(defaultextension=".key", title="Save Key File", filetypes=[("Key Files", "*.key")])
39+
with open(key_path, "wb") as key_file:
40+
key_file.write(key)
41+
log_message("Key saved successfully.")
42+
except Exception as e:
43+
log_message(f"Error saving key: {e}")
44+
45+
def encrypt_file():
46+
try:
47+
file_path = filedialog.askopenfilename(title="Select File to Encrypt")
48+
if not file_path:
49+
return # If user cancels the dialog
50+
51+
key = key_entry.get().encode()
52+
fernet = Fernet(key)
53+
54+
with open(file_path, "rb") as file:
55+
original = file.read()
56+
57+
encrypted = fernet.encrypt(original)
58+
59+
# Ask user where to save the encrypted file
60+
save_path = filedialog.asksaveasfilename(defaultextension=".enc", title="Save Encrypted File")
61+
if not save_path:
62+
return # If user cancels the dialog
63+
64+
with open(save_path, "wb") as encrypted_file:
65+
encrypted_file.write(encrypted)
66+
log_message(f"File encrypted successfully and saved to {save_path}.")
67+
except Exception as e:
68+
log_message(f"Error encrypting file: {e}")
69+
70+
def decrypt_file():
71+
try:
72+
file_path = filedialog.askopenfilename(title="Select File to Decrypt")
73+
if not file_path:
74+
return # If user cancels the dialog
75+
76+
key = key_entry.get().encode()
77+
fernet = Fernet(key)
78+
79+
with open(file_path, "rb") as encrypted_file:
80+
encrypted = encrypted_file.read()
81+
82+
decrypted = fernet.decrypt(encrypted)
83+
84+
# Ask user where to save the decrypted file
85+
save_path = filedialog.asksaveasfilename(defaultextension=".dec", title="Save Decrypted File")
86+
if not save_path:
87+
return # If user cancels the dialog
88+
89+
with open(save_path, "wb") as decrypted_file:
90+
decrypted_file.write(decrypted)
91+
log_message(f"File decrypted successfully and saved to {save_path}.")
92+
except Exception as e:
93+
log_message(f"Error decrypting file: {e}")
94+
95+
def log_message(message):
96+
global has_logged
97+
print(has_logged)
98+
if not has_logged:
99+
log_text.delete(1.0, tk.END) # Clear the text box
100+
has_logged = True
101+
log_text.insert(tk.END, message + "\n")
102+
log_text.see(tk.END)
103+
104+
105+
has_logged = False
106+
root = tk.Tk()
107+
root.title("BirdEncrypt for Business")
108+
root.geometry("800x600")
109+
110+
key_label = tk.Label(root, text="Encryption Key:")
111+
#key_label.pack(pady=5)
112+
key_entry = tk.Entry(root, width=50)
113+
key_entry.pack(pady=5, fill=tk.X)
114+
115+
# Frame for all buttons
116+
button_frame = tk.Frame(root)
117+
button_frame.pack(pady=10, fill=tk.X)
118+
119+
# All buttons on a single row
120+
generate_key_button = tk.Button(button_frame, text="Generate Key", command=generate_key, bg='blue', fg='white')
121+
generate_key_button.pack(side=tk.LEFT, expand=True, fill=tk.X)
122+
123+
load_key_button = tk.Button(button_frame, text="Load Key", command=load_key, bg='red', fg='white')
124+
load_key_button.pack(side=tk.LEFT, expand=True, fill=tk.X)
125+
126+
save_key_button = tk.Button(button_frame, text="Save Key", command=save_key, bg='purple', fg='white')
127+
save_key_button.pack(side=tk.LEFT, expand=True, fill=tk.X)
128+
129+
encrypt_button = tk.Button(button_frame, text="Encrypt File", command=encrypt_file, bg='green', fg='white')
130+
encrypt_button.pack(side=tk.LEFT, expand=True, fill=tk.X)
131+
132+
decrypt_button = tk.Button(button_frame, text="Decrypt File", command=decrypt_file, bg='orange', fg='black')
133+
decrypt_button.pack(side=tk.LEFT, expand=True, fill=tk.X)
134+
135+
# Adjust log_text to fill available height and width
136+
log_text = tk.Text(root, height=10, width=70)
137+
log_text.pack(pady=10, fill=tk.BOTH, expand=True)
138+
139+
generate_key()
140+
has_logged = False
141+
log_message("Mojavesoft BirdOffice 24.11, copyright October-November 2024.")
142+
143+
log_message("")
144+
log_message("To begin, load an existing key or generate a new one using the 'Generate Key' button.")
145+
146+
log_message("")
147+
log_message("NEVER send your keys online (except when using end-to-end encryption)!")
148+
149+
log_message("ALWAYS exchange keys offline, optimally hand-to-hand. Avoid using government-operated mailing services.")
150+
log_message("")
151+
152+
log_message("For more security advice, consult a manual.")
153+
154+
has_logged = False
155+
156+
root.mainloop()

0 commit comments

Comments
 (0)