使用 Fernet 时如何检查密钥是否已加密

How to check if a key is already encrypted while using Fernet

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

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

只需尝试使用 None(默认值)的 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))