· 4 months ago · May 29, 2025, 05:10 PM
1from tkinter import *
2import tkinter
3import tkinter.filedialog
4from functools import partial
5import os
6from binascii import *
7from hashlib import *
8from cryptography.fernet import Fernet, InvalidToken
9from pathlib import *
10
11root = Tk()
12root.title("Login")
13canvas = Canvas(root, width=500, height=500)
14global usernameid
15labelFont = ("Verdana", 13)
16
17# loading in the folders and files for first time use or files/folders not found
18if not Path("Accounts").is_dir():
19 os.mkdir("Accounts")
20if not Path("Keys").is_dir():
21 os.mkdir("Keys")
22if not Path("accs").is_dir():
23 os.mkdir("accs")
24if not Path("accs/passwords.txt").is_file():
25 file = open("accs/passwords.txt", "w+")
26 file.close()
27if not Path("accs/usernames.txt").is_file():
28 file1 = open("accs/usernames.txt", "w+")
29 file1.close()
30
31def LoggedIn():
32 root.quit()
33 CurrentStat = StringVar()
34 CurrentStat.set("...")
35 OutputStat = StringVar(value="")
36 FileToOpen = ""
37
38 def createFile():
39 content = f"""
40Id: {IdEntry.get()}
41Username: {UsernameEntry.get()}
42Password: {PasswordEntry.get()}
43 """
44 print(content)
45 print(content)
46 file = open("Accounts/%s.txt" % IdEntry.get(), "wb")
47 encrypted = fernet.encrypt(content.encode())
48 file.write(encrypted)
49 file.close()
50
51 def openFile():
52 fileToOpen = tkinter.filedialog.askopenfilename(initialdir="Accounts", title="Select A File",
53 filetypes=(("txt files", "*.txt"), ("all files", '*.*')))
54 StatusBar.config(text="Status: Working")
55 try:
56
57 file = open(fileToOpen, "r")
58 text = file.read().encode()
59 text_decrypted = fernet.decrypt(text).decode()
60 print(text_decrypted)
61 output.insert(INSERT, text_decrypted)
62 except FileNotFoundError:
63 pass
64 except InvalidToken:
65 StatusBar.config(text="Invalid File Or Another Users File")
66
67 username = str(usernameVar.get())
68 root3 = Tk()
69 canvas3 = Canvas(root3, width=750, height=400)
70 root3.title("Welcome, %s" % username.capitalize())
71 # Generating a Fernet key, when a new user joins. Every User has its own unique key.
72 usernamehash = hexlify(pbkdf2_hmac("sha256", username.encode(), b"salt", 100000))
73 try:
74 # Checking if a key exists
75 file = open("Keys/%s.key" % usernamehash, "rb")
76 key = file.read()
77 file.close()
78 except FileNotFoundError:
79 # if not then generate one and create a file with the key specified to the user.
80 key = Fernet.generate_key()
81 file = open("Keys/%s.key" % usernamehash, "wb")
82 file.write(key)
83 file.close()
84 finally:
85 # finally opening the file with the key. To be sure that the new user has a key.
86 file = open("Keys/%s.key" % usernamehash, "rb")
87 key = file.read()
88 file.close()
89 fernet = Fernet(key)
90
91 welcomeLabel = Label(root3, text="Welcome, %s" % username.capitalize(), font=("Verdana", 17))
92 canvas3.create_window(750 / 2, 10, window=welcomeLabel)
93
94 StatusBar = Label(root3, text="Status: Working", font=("Verdana", 13), borderwidth=3, relief="sunken")
95 canvas3.create_window(375, 50, window=StatusBar)
96
97 openButton = Button(root3, text="Open File", font=("Verddana", 10), width=7, height=2, command=openFile)
98 canvas3.create_window(120, 150, window=openButton)
99
100 openDescription = Label(root3, text="Open Files That You Have Created(Decrypted Version)", font=("Verdana", 13))
101 canvas3.create_window(262, 100, window=openDescription)
102
103 createButton = Button(root3, text="Create", font=("Verdana", 15), command=createFile)
104 canvas3.create_window(375, 370, window=createButton)
105
106 createDescription = Label(root3, text="Create new file(s)/Id(s) such as your Gmail Id/Account(s)",
107 font=("Verdana", 12))
108 canvas3.create_window(260, 205, window=createDescription)
109
110 exitButton = Button(root3, text="Exit", font=("Verdana", 15), command=exit)
111 canvas3.create_window(700, 350, window=exitButton)
112
113 output = Text(root3, width=25, borderwidth=3, height=4, relief="sunken") # Output
114 canvas3.create_window(300, 150, window=output)
115
116 UsernameLabel = Label(root3, text="Username/Email", font=("Verdana", 13))
117 canvas3.create_window(100, 250, window=UsernameLabel)
118
119 UsernameVar = StringVar(value="")
120 UsernameEntry = Entry(root3, textvariable=UsernameVar, font=("Verdana", 13), width=30)
121 canvas3.create_window(420, 250, window=UsernameEntry)
122
123 PasswordLabel = Label(root3, text="Password", font=("Verdana", 13))
124 canvas3.create_window(70, 290, window=PasswordLabel)
125
126 passwordVar = StringVar(value="")
127 PasswordEntry = Entry(root3, textvariable=passwordVar, font=("Verdana", 13), width=30)
128 canvas3.create_window(420, 290, window=PasswordEntry)
129
130 IdLabel = Label(root3, text="Id Of The File", font=("Verdana", 13))
131 canvas3.create_window(87, 330, window=IdLabel)
132
133 IdVar = StringVar(value="")
134 IdEntry = Entry(root3, textvariable=IdVar, font=("Verdana", 13), width=30)
135 canvas3.create_window(420, 330, window=IdEntry)
136
137 canvas3.pack()
138 root3.mainloop()
139
140
141def Signup():
142 root2 = Tk()
143 canvas2 = Canvas(root2, width=750, height=400)
144
145 userLabel = Label(root2, text="UserName", font=labelFont)
146 canvas2.create_window(75, 50, window=userLabel)
147
148 uservar = StringVar(value="")
149 username = Entry(root2, textvariable=uservar, font=labelFont, width=40)
150 canvas2.create_window(400, 50, window=username)
151
152 passLabel = Label(root2, text="Password", font=labelFont)
153 canvas2.create_window(73, 85, window=passLabel)
154
155 passvar = StringVar()
156 password = Entry(root2, textvariable=passvar, font=labelFont, width=40)
157 canvas2.create_window(400, 85, window=password)
158
159 def write():
160
161 userKey = open("accs/usernames.txt", "r")
162 userw = userKey.read().split("\n")
163 usernamedecrypted = hexlify(pbkdf2_hmac('sha256', username.get().encode(), b'salt', 100000)).decode()
164 check = False
165 try:
166 for user in userw:
167
168 if usernamedecrypted == user:
169 check = True
170 finally:
171 if check == False:
172
173 print("user created")
174 file = open("accs/usernames.txt", "a")
175 file.write(f"\n{hexlify(pbkdf2_hmac('sha256', username.get().encode(), b'salt', 100000)).decode()}")
176 print(username.get())
177 usernameid = username.get()
178 file.close()
179
180 file = open("accs/passwords.txt", "a")
181 file.write(f'\n' + hexlify(pbkdf2_hmac('sha256', password.get().encode(), b'salt', 100000)).decode())
182 print(password.get())
183 file.close()
184 print("passwords hashed")
185 else:
186 print("user already exists")
187 messageBox = messagebox.showinfo(title="User Exists", message="User Already Exists!")
188
189 button = Button(root2, text="Sign Up", font=labelFont,
190 command=write)
191 canvas2.create_window(200, 150, window=button)
192
193 canvas2.pack()
194 root2.mainloop()
195
196
197def Login(usernamevar, passwordvar, status, user):
198 try:
199 userKey = open("accs/usernames.txt", "r")
200 userw = userKey.read().split("\n")
201
202 userKey.close()
203
204 file = open("accs/passwords.txt", "r")
205 passw = file.read().split("\n")
206 file.close()
207
208 userk = pbkdf2_hmac('sha256', usernamevar.get().encode(), b'salt', 100000)
209 passk = pbkdf2_hmac('sha256', passwordvar.get().encode(), b'salt', 100000)
210 usernamevar = hexlify(userk).decode()
211 passwordvar = hexlify(passk).decode()
212 except FileNotFoundError:
213 status.config(text="Invalid Password or username")
214
215 check = False
216 # identifying hashes
217 try:
218 for password in passw:
219 for username in userw:
220 if not check:
221 if usernamevar == username and passwordvar == password:
222 print("valid")
223 status.config(text="Logged In")
224 check = True
225 LoggedIn()
226 finally:
227 if not check:
228 print('invalid')
229 status.config(text="Invalid Username Or password")
230
231
232stat = "..."
233
234usernameLabel = Label(root, text="Username", font=('Verdana', 13))
235canvas.create_window(200, 70, window=usernameLabel)
236
237usernameVar = StringVar()
238usernameVar.set("")
239Username = Entry(root, textvariable=usernameVar, font=("Verdana", 15))
240canvas.create_window(200, 100, window=Username)
241
242passwordLabel = Label(root, text="Password", font=('Verdana', 12))
243canvas.create_window(200, 125, window=passwordLabel)
244
245PasswordVar = StringVar(value="")
246Password = Entry(root, textvariable=PasswordVar, font=("Verdana", 15))
247canvas.create_window(200, 150, window=Password)
248
249signup = Button(root, text="Signup", font=("Verdana", 12), command=Signup)
250canvas.create_window(270, 190, window=signup)
251
252status = Label(root, text="Waiting...", font=("Verdaana", 13))
253canvas.create_window(200, 20, window=status)
254
255us = usernameVar
256
257Confirm = Button(root,
258 text="Login",
259 command=partial(Login, usernameVar, PasswordVar, status, us),
260 font=('Verdana', 12))
261
262canvas.create_window(200, 190, window=Confirm)
263
264canvas.pack()
265root.mainloop()