在 Python 中使用 Fernet 加密和解密数据库中的数据

2023-03-29 00:00:00 加密 解密 数据库中

使用 Fernet 在 Python 中加密和解密数据库中的数据非常简单。下面是一个示例,演示了如何使用 Fernet 加密和解密数据库中的数据:

首先,在你的 Python 项目中安装 cryptography 库:

pip install cryptography

然后,创建一个加密模块 encryption.py,用于加密和解密数据:

from cryptography.fernet import Fernet

# 密钥加密和解密时必须相同
SECRET_KEY = b'your-secret-key-here'

class Encryption:
    def __init__(self, key):
        self.key = key

    def encrypt(self, plaintext):
        fernet = Fernet(self.key)
        return fernet.encrypt(plaintext.encode())

    def decrypt(self, ciphertext):
        fernet = Fernet(self.key)
        return fernet.decrypt(ciphertext).decode()

在上述代码中,我们首先定义了 Fernet 密钥,然后创建了一个加密类 Encryption,用于加密和解密数据。在构造函数中,我们传入 Fernet 密钥。然后,我们使用 Fernet 密钥加密和解密数据。

假设你的数据库中有一个名为 user 的表,其中有一个名为 email 的字段需要加密。你可以使用以下代码将数据加密并保存到数据库中:

import sqlite3
from encryption import Encryption

conn = sqlite3.connect('example.db')
c = conn.cursor()

# 创建 user 表
c.execute('CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY, email TEXT)')

# 创建加密实例
encryption = Encryption(SECRET_KEY)

# 加密并插入数据
plaintext = 'pidancode.com'
ciphertext = encryption.encrypt(plaintext)
c.execute('INSERT INTO user (email) VALUES (?)', (ciphertext,))

conn.commit()
conn.close()

在上述代码中,我们首先创建了一个 SQLite 数据库连接,并创建了一个名为 user 的表。然后,我们创建了一个加密实例 encryption,并使用它将明文 plaintext 加密为密文 ciphertext。最后,我们将密文插入到 user 表的 email 字段中,并提交更改。

如果你需要从数据库中检索加密的数据,并解密它们,可以使用以下代码:

import sqlite3
from encryption import Encryption

conn = sqlite3.connect('example.db')
c = conn.cursor()

# 创建加密实例
encryption = Encryption(SECRET_KEY)

# 检索并解密数据
c.execute('SELECT email FROM user')
rows = c.fetchall()
for row in rows:
    ciphertext = row[0]
    plaintext = encryption.decrypt(ciphertext)
    print(plaintext)

conn.close()

在上述代码中,我们首先创建了一个 SQLite 数据库连接,并创建了一个加密实例 encryption。然后,我们从 user 表的 email 字段中检索密文,并使用加密实例 encryption 解密它们。最后,

相关文章