AES_ENCRYPT () и AES_DECRYPT не работают должным образом для сохранения значений в mysql с использованием сервера xampp и python flask - PullRequest
1 голос
/ 29 января 2020

Я изучаю 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()

...