Я изучаю python flask и разрабатываю веб-страницу, где я могу регистрировать и хранить пользовательские данные в зашифрованном формате в базе данных MySQL, используя сервер XAMPP, и расшифровывать их для проверки данных пользователя во время входа в систему.
Здесь, при хранении зашифрованного пароля в базе данных, функция AES_ENCRYPT
шифрует саму строку «пароль», а не тот, который введен в форму. А функция AES_DECRYPT
не возвращает строку во время проверки входа в систему, поэтому всегда показывает неверный пароль. Как решить эту проблему?
from flask import Flask, request, render_template
app = Flask(__name__)
import mysql.connector as MySQLdb
@app.route('/')
@app.route('/login')
def login():
return render_template('login.html')
@app.route('/register')
def register():
return render_template('register.html')
def valid_login(uname, password):
# Open database connection
db = MySQLdb.connect(
host="localhost",
user="root",
passwd="",
database="sam"
)
cursor = db.cursor()
sql = "SELECT AES_DECRYPT(AES_ENCRYPT('passcode', 'usa2010'), 'usa2010') FROM user WHERE username = %s"
value =(uname, )
cursor.execute(sql, value)
row = cursor.fetchone()
print(row[0])
if password == row[0].decode():
return 1
else:
return 0
# disconnect from server
db.close()
def valid_insert(uname, email, password, phone, city):
# Open database connection
db = MySQLdb.connect(
host="localhost",
user="root",
passwd="",
database="sam"
)
cursor = db.cursor()
sql = "INSERT INTO user VALUES (%s, %s, AES_ENCRYPT(password, 'usa2010'), %s, %s)"
val = (uname, email, phone, city)
cursor.execute(sql, val)
db.commit()
if cursor.rowcount > 0:
return 1
else:
return 0
# disconnect from server
db.close()
@app.route('/check', methods=['POST'])
def check():
error = None
if request.method == 'POST':
if valid_login(request.form['uname'], request.form['pass']):
return render_template('home.html')
else:
print('Invalid username/password')
return render_template('login.html')
@app.route('/login_insert', methods=['POST'])
def insert():
error = None
if request.method == 'POST':
if valid_insert(request.form['uname'], request.form['email'], request.form['pass'], request.form['phone'], request.form['city']):
return render_template('login.html')
else:
error = 'Username already taken.'
return render_template('register.html')
if __name__ == '__main__':
app.run()