首页 > 解决方案 > 散列文本文件

问题描述

我正在尝试使用 TKINTER 在 python 中创建一个注册和登录应用程序。我有一个工作程序,虽然它并不安全,因为用户详细信息存储在文本文件中,但我认为使其更安全的最佳方法是对文件进行哈希处理。我一直在尝试和尝试,但我无法做到,我该怎么做,我遇到了什么问题?

import os
from tkinter import *
import hashlib

def delete2():
screen3.destroy()


def delete3():
screen4.destroy()


def delete4():
screen5.destroy()


def login_success():
global screen3
screen3 = Toplevel(screen)
screen3.title("Success!")
screen3.geometry("150x100")
Label(screen3, text="Login Success!").pack()
Button(screen3, text="OK", command=delete2).pack()


def invalid_credentials():
global screen4
screen4 = Toplevel(screen)
screen4.title("Invalid password or secret")
screen4.geometry("150x100")
Label(screen4, text="Invalid credentials!").pack()
Button(screen4, text="OK", command=delete3).pack()


def user_not_found():
global screen5
screen5 = Toplevel(screen)
screen5.title("User not found")
screen5.geometry("150x100")
Label(screen5, text="User not found").pack()
Button(screen5, text="OK", command=delete4).pack()


def register_user():
print("Working")
username_info = username.get()
password_info = password.get()
secret_info = secret.get()

password_info.encode()
username_info.encode()

# find a better way to save files, TXT is not at all secure
File = open(username_info, "w")
File.write(username_info + "\n")
File.write(password_info + "\n")
File.write(secret_info)
File.close()

#File = (username_info+".txt")
#BLOCK_SIZE = 65536

#file_hash = hashlib.sha256()
#with open(File, "rb")as f:
 #   fb = f.read(BLOCK_SIZE)
  #  while len(fb) > 0:
   #     file_hash.update(fb)
    #    fb = f.read(BLOCK_SIZE)

#print(file_hash.hexdigest())

username_entry.delete(0, END)
password_entry.delete(0, END)
secret_entry.delete(0, END)

Label(screen1, text="Registration Successful", fg="green", font=("calibri", 11)).pack()


def login_verify():
username1 = username_verify.get()
password1 = password_verify.get()
secret1 = secret_verify.get()
username_entry1.delete(0, END)
password_entry1.delete(0, END)
secret_entry1.delete(0, END)

list_of_files = os.listdir()
if username1 in list_of_files:
    file1 = open(username1, "r")
    verify = file1.read().splitlines()
    if password1 in verify:
        print("")
        if secret1 in verify:
            login_success()
        else:
            invalid_credentials()
    else:
        invalid_credentials()


else:
    user_not_found()


def register():
global screen1
screen1 = Toplevel(screen)
screen1.title("Register")
screen1.geometry("350x250")

global username
global password
global secret
global username_entry
global password_entry
global secret_entry

username = StringVar()
password = StringVar()
secret = StringVar()
private_key = StringVar()

# buttons for registration screen1
Label(screen1, text="Please enter details below * ").pack()
Label(screen1, text="").pack()

Label(screen1, text="Username * ").pack()
username_entry = Entry(screen1, textvariable=username)
username_entry.pack()

# Label(screen1, text="Password * ").pack()
# password_entry = Entry(screen1, show="*", textvariable=password)
# password_entry.pack()

Label(screen1, text="Password * ").pack()
password_entry = Entry(screen1, show="*", textvariable=password)
password_entry.pack()

Label(screen1, text="Shared Secret * ").pack()
secret_entry = Entry(screen1, textvariable=secret)
secret_entry.pack()
Label(screen1, text="").pack()
Button(screen1, text="Register", width="10", height="1", command=register_user).pack()

# Possibly do in new .py


def login():
global screen2
screen2 = Toplevel(screen)
screen2.title("Login")
screen2.geometry("300x250")
Label(screen2, text="Please enter details below to login").pack()
Label(screen2, text="").pack()

global username_verify
global password_verify
global secret_verify
username_verify = StringVar()
password_verify = StringVar()
secret_verify = StringVar()

global username_entry1
global password_entry1
global secret_entry1

Label(screen2, text="Username * ").pack()
username_entry1 = Entry(screen2, textvariable=username_verify)
username_entry1.pack()
Label(screen2, text="").pack()
Label(screen2, text="Password * ").pack()
password_entry1 = Entry(screen2, show="*", textvariable=password_verify)
password_entry1.pack()
Label(screen2, text="").pack()
Label(screen2, text="Shared Secret * ").pack()
secret_entry1 = Entry(screen2, textvariable=secret_verify)
secret_entry1.pack()
Label(screen2, text="").pack()
Button(screen2, text="Login", width=10, height=1, command=login_verify).pack()


def main_screen():
global screen
screen = Tk()
# Screen size, title, font and login and register buttons
screen.geometry("300x250")
screen.title("PassWordProject")
Label(text="PassWordProject", bg="grey", width="300", height="2", font=("Calibri", 13)).pack()
Label(text="").pack()
Button(text="Login", height="2", width="30", command=login).pack()
Label(text="").pack()
Button(text="Register", height="2", width="30", command=register).pack()

screen.mainloop()


main_screen()

标签: pythonsecurityauthenticationhashregistration

解决方案


推荐阅读