38292-vm/core/utils.py
2026-02-08 23:06:38 +00:00

35 lines
959 B
Python

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"