import base64 import os from cryptography.fernet import Fernet from django.conf import settings from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC def get_fernet(): # Derive a key from Django's SECRET_KEY password = settings.SECRET_KEY.encode() salt = b'flatlogic_salt' # In production, this should be unique and stored kdf = PBKDF2HMAC( algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000, ) key = base64.urlsafe_b64encode(kdf.derive(password)) return Fernet(key) def encrypt_value(value: str) -> str: if not value: return "" f = get_fernet() return f.encrypt(value.encode()).decode() def decrypt_value(value: str) -> str: if not value: return "" f = get_fernet() try: return f.decrypt(value.encode()).decode() except Exception: return "ERROR_DECRYPTING"