Opened 23 months ago
Closed 23 months ago
#34246 closed New feature (wontfix)
Feature: Add new type of fields - cryptofields
Reported by: | Nikolay Fedorov | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 4.1 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Idea
Add new type of fields - cryptofields which store data in the database in encrypted form (bytes) and crypt and decrypt data on the fly.
As example with Fernet (symmetric encryption).
from django.db import models from cryptography.fernet import Fernet CRYPTO_KEY = b'99lectrHf-urwE8CEXAqCf2UofCb-K-rEiT_VdRWhXY=' class CryptoCharField(models.CharField): description = _("Crypto char field") def value_from_object(self, obj): val = getattr(obj, self.attname) if val not in (None, "", b""): val = settings.CYPHER.decrypt(val).decode('utf-8') return val def get_internal_type(self): return "BinaryField" def get_db_prep_value(self, value, connection, prepared=False): value = super().get_db_prep_value(value, connection, prepared) if value is not None: return connection.Database.Binary(Fernet(CRYPTO_KEY).encrypt(value.encode('utf-8'))) return value
Change History (1)
comment:1 by , 23 months ago
Component: | Forms → Database layer (models, ORM) |
---|---|
Resolution: | → wontfix |
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
I think we'd rather see specialized fields like this implemented in third-party packages, e.g. https://pypi.org/project/django-crypto-fields/.
For future reference, it's better to raise a proposal like this on the DevelopersMailingList to see if there's consensus about adding it.