Skip to content

加密敏感数据 (Encrypting sensitive data) ​


诸如令牌(tokens)、密钥(keys)、信用卡号等敏感数据或“秘密”(secrets)必须在静态存储(数据库、文件、客户端存储)中以加密形式保存,以避免数据泄露。

Flet 包含使用对称算法(加密和解密使用相同的密钥)加密和解密敏感文本数据的工具方法。它们基于 cryptography 包中的 Fernet 实现,即 AES 128 配合了一些额外的安全加固,并使用 PBKDF2 算法从用户密码句中导出加密私钥。

密钥 (Secret key) ​

加密密钥(又称密码或密码句)是用户配置的任意类似密码的字符串,用于加密和解密数据。加密算法使用密钥来“派生”出加密钥匙(32 字节)。

危险

切勿将任何敏感密钥硬编码写入源代码中,以防止意外泄露!

你可以通过环境变量向应用提供密钥:

python
import os
secret_key = os.getenv("MY_APP_SECRET_KEY")

在运行应用之前,在命令行终端中配置好该密钥环境变量:

bash
$ export MY_APP_SECRET_KEY="<你的自定义加密密钥>"

提示

虽然通过环境变量传递密钥在开发人员和服务提供商之间是一种普遍的做法,但在某些环境中它并不能完全防止密钥泄漏。也可以使用其他机制向应用程序中注入密钥,例如挂载密钥文件或使用金库服务(Vault services)。


加密数据 (Encrypting data) ​

使用 encrypt() 方法加密字符串:

python
import os
from flet.security import encrypt, decrypt

secret_key = os.getenv("MY_APP_SECRET_KEY")
plain_text = "This is a secret message!"
encrypted_data = encrypt(plain_text, secret_key)

encrypted_data 是一个 URL 安全的 Base64 编码字符串。

encrypt 仅接受字符串类型,因此任何对象在加密前必须序列化为 JSON、XML 或其他文本格式。


解密数据 (Decrypting data) ​

使用 decrypt() 方法解密数据:

python
import os
from flet.security import encrypt, decrypt

secret_key = os.getenv("MY_APP_SECRET_KEY")
encrypted_data = "601llp2zpPp4QjBWe2cOwGdBQUFBQUJqTTFJbmgyWU5jblVp..."
plain_text = decrypt(encrypted_data, secret_key)
print(plain_text)

关注我,学习大模型、大数据、Python等热门技术。