在 Python 中使用 Fernet 加密和解密数据库中的数据
使用 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 解密它们。最后,
相关文章