首页 > 解决方案 > 如何在使用 Fernet 时检查密钥是否已加密

问题描述

我正在尝试使用 python 脚本加密我的环境文件中的合理值。我正在使用 Fernet。我只想加密那些尚未加密的值,确保没有任何多级加密。

在这种情况下,我如何知道某个值已经加密或解密?

标签: pythoncryptographyenvironment-variablesfernet

解决方案


只需尝试使用无 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))


推荐阅读