35 lines
959 B
Python
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"
|