要在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()
在上面的代码中,我们首先加载密钥并打开数据库。然后,我们从表格中读取数据,并使用相同的密钥来解密加密数据。最后,我们关闭数据库连接并打印解密后的数据。
请注意,这只是一个简单的示例,实际情况中,您需要考虑更多的数据安全性问题,例如如何保护密钥,如何处理敏感数据等。