加密敏感数据
敏感数据,如令牌、密钥、信用卡号和其他“秘密”,必须在存储时(数据库、文件、客户端存储)以加密形式存储,以避免数据泄露。
Flet 包括实用方法,使用对称算法(同一密钥用于加密和解密)来加密和解密敏感文本数据。它们使用 Fernet 实现来自 cryptography 包,which 是 AES 128 加上一些额外的加固,plus PBKDF2 从用户密码派生加密密钥。
秘密密钥
加密秘密密钥(也称为密码或密码短语)是一个任意的密码样字符串,由用户配置并用于加密和解密数据。加密算法使用秘密密钥来“派生”加密密钥(32 字节)。
危险
不要 将任何秘密嵌入源代码,以免意外公开!
您可以通过环境变量提供秘密密钥给应用程序:
import os
secret_key = os.getenv("MY_APP_SECRET_KEY")
在运行应用程序之前,在命令行中设置秘密密钥:
$ export MY_APP_SECRET_KEY="<secret>"
备注
虽然通过环境变量传递秘密是一种常见的做法,但它不能完全防止秘密泄露在某些环境中。其他机制可以用于将秘密注入应用程序,例如挂载秘密文件或vault服务。
加密数据
使用 encrypt()
方法来加密字符串:
import os
from flet.security import encrypt, decrypt
secret_key = os.getenv("MY_APP_SECRET_KEY")
plain_text = "这是一个秘密消息!"
encrypted_data = encrypt(plain_text, secret_key)
encrypted_data
是一个 URL 安全的 base64 编码字符串。
encrypt
只接受字符串,因此任何对象必须在加密之前序列化为 JSON、XML 或其他文本格式。
解密数据
使用 decrypt()
方法来解密数据:
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)