使用 Fernet 和 SQLite 在 Python 中创建加密的本地数据库

2023-03-29 00:00:00 创建 数据库 加密

要在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()

在上面的代码中,我们首先加载密钥并打开数据库。然后,我们从表格中读取数据,并使用相同的密钥来解密加密数据。最后,我们关闭数据库连接并打印解密后的数据。

请注意,这只是一个简单的示例,实际情况中,您需要考虑更多的数据安全性问题,例如如何保护密钥,如何处理敏感数据等。

相关文章