Hi everyone. Let's talk about encrypting data in Django.
Django has a built-in module called signing that allows you to sign data and then also unsign it. It uses SECRET_KEY of your project to hash so only the backend that encrypted can decrypt the data. There might be many use cases of this. I encountered the given situation recently.
"""An utility module to sign and unsign email."""
from django.core import signing
from typing import Union
def sign(email: str) -> str:
"""Returns signed email using Django Secret Key."""
signer = signing.Signer(salt="Salty Thingy")
enc = signer.sign_object(email) #also supports other types
return enc
def unsign(email: str) -> Union[str, None]:
""" Returns decrypted email and error if any. """
signer = signing.Signer(salt="Salty Thingy") #salt needs to be same
try:
enc = signer.unsign_object(email)
return enc, None
except signing.BadSignature as e:
print("enc has been tinkered.")
return None, e