我建议不要1)使用字典作为持久存储身份验证数据的方式,2)将用户密码直接存储在这样的数据库中。
如果你真的不需要使用字典,那么一些简单的解决方案
sqlite
(.db文件而不是.txt文件)和一些散列库可以帮助您实现目标。代码可能是这样的:
import sqlite3
import hashlib
def create_table():
query = "DROP TABLE IF EXISTS login"
cursor.execute(query)
conn.commit()
query = "CREATE TABLE login(name VARCHAR DEFAULT '', email VARCHAR NOT NULL UNIQUE, password VARCHAR NOT NULL)"
cursor.execute(query)
conn.commit()
def add_user(name, email, raw_password):
query = "INSERT INTO login (name, email, password) VALUES (?, ?, ?)"
hashed_password = hashlib.sha256(raw_password.encode('utf-8')).hexdigest()
cursor.execute(query, (name, email, hashed_password))
conn.commit()
def check_user(name, email, raw_password):
query = 'SELECT * FROM login WHERE name = ? AND email = ? AND password = ?'
hashed_password = hashlib.sha256(raw_password.encode('utf-8')).hexdigest()
cursor.execute(query, (name, email, hashed_password))
result = cursor.fetchone()
conn.commit()
print('[DEBUG][check] result:', result)
return result
def login():
answer = input("Login (Y/N): ")
if answer.lower() == "y":
name = input("Name: ")
email = input("Email: ")
password = input("Password: ")
if check_user(name, email, password):
print("Email correct!")
print("Password correct!")
print("Logging in...")
else:
print("Something wrong")
# --- main ---
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
create_table() # use only once
name = input("New name: ")
email = input("New email: ")
password = input("New password: ")
add_user(name, email, password)
login()
cursor.close()
conn.close()