跳到主要内容

加密敏感数据

敏感数据,如令牌、密钥、信用卡号和其他“秘密”,必须在存储时(数据库、文件、客户端存储)以加密形式存储,以避免数据泄露。

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)