Как проверить, что ключ уже зашифрован при использовании Fernet - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь зашифровать разумные значения в моем файле среды, используя скрипт python. Я использую Fe rnet. Я хочу зашифровать только те значения, которые еще не зашифрованы, чтобы не было многоуровневого шифрования.

Как узнать, что в этом случае значение уже зашифровано или расшифровано?

1 Ответ

0 голосов
/ 12 апреля 2020

Просто попытайтесь расшифровать с TTL, равным None (по умолчанию). Если это удастся, то вам больше ничего не нужно делать. В случае неудачи будет сгенерировано исключение InvalidToken, которое вы можете перехватить. Внутри блока исключений вы можете зашифровать файл, как в следующем примере:

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))

...