使用 Fernet 和 Flask 在 Python Web 应用程序中保护用户数据

2023-03-28 00:00:00 数据 应用程序 保护

使用 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/ 来打开登录页面。

在登录页面中输入用户名和密码,点击登录按钮,程序会将用户名和加密后的密码存储到数据库中。如果需要验证用户的登录信息,可以在登录时将密码解密后与数据库中的密码进行比较。另外,为了增强安全性,可以

相关文章