import base64 import hashlib from cryptography.fernet import Fernet, InvalidToken from app.core.config import settings def _fernet() -> Fernet: digest = hashlib.sha256(settings.secret_key.encode("utf-8")).digest() key = base64.urlsafe_b64encode(digest) return Fernet(key) def encrypt_secret(plain: str) -> str: if not plain: return "" return _fernet().encrypt(plain.encode("utf-8")).decode("utf-8") def decrypt_secret(cipher: str) -> str: if not cipher: return "" try: return _fernet().decrypt(cipher.encode("utf-8")).decode("utf-8") except (InvalidToken, ValueError): # Bestehende Klartext-Einträge aus älteren Installationen. return cipher