使用 Fernet 和 Flask 在 Python Web 应用程序中保护用户数据
使用 Fernet 和 Flask 可以在 Python Web 应用程序中保护用户数据。在这个例子中,我们将使用 Flask 框架和 Fernet 加密模块来实现一个简单的用户登录功能,用户在登录时输入用户名和密码,我们将对密码进行加密,并将加密后的密码存储到数据库中,以保护用户数据的安全性。
首先,我们需要安装 Flask 和 cryptography 模块:
pip install Flask cryptography
然后,我们可以创建一个简单的 Flask 应用程序,包含一个登录页面和一个处理登录请求的视图函数。这里使用 SQLite 数据库来存储用户数据。
from flask import Flask, request, render_template from cryptography.fernet import Fernet import sqlite3 app = Flask(__name__) # 生成随机密钥 key = Fernet.generate_key() # 创建 Fernet 对象 fernet = Fernet(key) # 连接数据库 conn = sqlite3.connect('users.db') # 创建用户表 conn.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL);''') @app.route('/', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] # 对密码进行加密 encrypted_password = fernet.encrypt(password.encode()) # 将用户名和加密后的密码存储到数据库中 conn.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, encrypted_password)) conn.commit() return '注册成功!' return render_template('login.html') if __name__ == '__main__': app.run(debug=True)\
在这个例子中,我们使用 Fernet 对用户输入的密码进行加密,并将加密后的密码存储到数据库中。在登录页面中,我们通过表单获取用户的用户名和密码,并在视图函数中进行加密和存储操作。需要注意的是,这个例子中没有对用户名进行加密,如果需要更高的安全性,可以对用户名也进行加密。
在运行程序之前,我们还需要创建一个 HTML 模板 login.html:
<!DOCTYPE html> <html> <head> <title>登录</title> </head> <body> <h1>登录</h1> <form method="post" action="/"> <label for="username">用户名:</label> <input type="text" name="username" id="username"><br> <label for="password">密码:</label> <input type="password" name="password" id="password"><br> <input type="submit" value="登录"> </form> </body> </html>
最后,我们可以在命令行中运行应用程序,并在浏览器中访问 http://localhost:5000/ 来打开登录页面。
在登录页面中输入用户名和密码,点击登录按钮,程序会将用户名和加密后的密码存储到数据库中。如果需要验证用户的登录信息,可以在登录时将密码解密后与数据库中的密码进行比较。另外,为了增强安全性,可以
相关文章