使用 Fernet 和 SQLite 在 Python 中创建加密的本地数据库
要在Python中创建一个加密的本地数据库,您可以使用Fernet加密算法来加密您的数据,并使用SQLite作为数据库管理系统。
以下是一个使用Fernet和SQLite在Python中创建加密的本地数据库的例子:
import sqlite3 from cryptography.fernet import Fernet # 创建加密密钥并保存到文件 key = Fernet.generate_key() with open('key.key', 'wb') as key_file: key_file.write(key) # 加载密钥 with open('key.key', 'rb') as key_file: key = key_file.read() f = Fernet(key) # 创建或打开数据库 conn = sqlite3.connect('my_database.db') # 创建表格 conn.execute('''CREATE TABLE IF NOT EXISTS my_table (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, encrypted_data TEXT NOT NULL);''') # 添加数据到表格 name = 'pidancode.com' data = 'This is sensitive data' encrypted_data = f.encrypt(data.encode('utf-8')).decode('utf-8') conn.execute("INSERT INTO my_table (name, encrypted_data) VALUES (?, ?)", (name, encrypted_data)) name = '皮蛋编程' data = 'This is also sensitive data' encrypted_data = f.encrypt(data.encode('utf-8')).decode('utf-8') conn.execute("INSERT INTO my_table (name, encrypted_data) VALUES (?, ?)", (name, encrypted_data)) # 提交更改并关闭数据库连接 conn.commit() conn.close()
在上面的例子中,我们首先生成了一个加密密钥,并将其保存到名为“key.key”的文件中。然后,我们加载密钥并使用Fernet加密算法来加密敏感数据。我们使用SQLite来创建一个名为“my_database.db”的数据库,并在其中创建了一个名为“my_table”的表格。我们将加密后的数据插入表格中,并提交更改。
在读取加密数据时,我们可以使用相同的密钥来解密它们:
# 加载密钥 with open('key.key', 'rb') as key_file: key = key_file.read() f = Fernet(key) # 打开数据库 conn = sqlite3.connect('my_database.db') # 从表格中读取数据 cursor = conn.execute("SELECT ID, name, encrypted_data FROM my_table") for row in cursor: id = row[0] name = row[1] encrypted_data = row[2] decrypted_data = f.decrypt(encrypted_data.encode('utf-8')).decode('utf-8') print(f"{id}: {name} - {decrypted_data}") # 关闭数据库连接 conn.close()
在上面的代码中,我们首先加载密钥并打开数据库。然后,我们从表格中读取数据,并使用相同的密钥来解密加密数据。最后,我们关闭数据库连接并打印解密后的数据。
请注意,这只是一个简单的示例,实际情况中,您需要考虑更多的数据安全性问题,例如如何保护密钥,如何处理敏感数据等。
相关文章