python - 如何在使用 Fernet 时检查密钥是否已加密
问题描述
我正在尝试使用 python 脚本加密我的环境文件中的合理值。我正在使用 Fernet。我只想加密那些尚未加密的值,确保没有任何多级加密。
在这种情况下,我如何知道某个值已经加密或解密?
解决方案
只需尝试使用无 TTL(默认值)进行解密。如果它成功了,那么你就不需要再做任何事情了。如果失败,将引发 InvalidToken 异常,您可以捕获该异常。在 except 块中,您可以加密文件,如下例所示:
import base64
from pathlib import Path
from cryptography.fernet import Fernet, InvalidToken
key = Fernet.generate_key()
f = Fernet(key)
encrypted = f.encrypt(b'Hello world')
p1, p2 = Path('file1'), Path('file2')
p1.write_bytes(encrypted)
p2.write_bytes(base64.urlsafe_b64encode(b'\x80not encrypted'))
for example in (p1, p2):
try:
data = example.read_bytes()
f.decrypt(data, None)
except InvalidToken:
example.write_bytes(f.encrypt(data))
推荐阅读
- machine-learning - KNN算法在训练阶段做了什么?
- python - 为什么我的 ModelChoiceField 显示三个表单而不是两个表单,为什么它不读取我的选择?
- python-3.x - 选择导入文本文件的特定列
- python - discord.py 缺少类别 api 和枚举 def
- angular - 组件生命周期
- visual-studio - Google Play 应用签名密钥与 Visual Studio
- django - 在 Djnago 中进行迁移不会创建 ForeignKey 和 OneToOneFields,而是在创建模型后添加它们。无法迁移
- node.js - 使用 JWT (Node.js + mongoose) 在 REST API 中管理用户权限的最佳方式
- javascript - 多个 div 元素的 JS 切换
- c++ - 从文本文件中读取尺寸和表格内容后显示表格