Так видимо Джанго-расширения имеет two fields for this very purpose:
- EncryptedCharField - CharField, который прозрачно шифрует свое значение, как она идет в и из базы данных. Шифрование обрабатывается Keyczar. Чтобы использовать это поле, вы должны установить Keyczar, чтобы сгенерировал первичный ключ шифрования и установил параметры. KEYS_DIR установил для полный путь к вашей директории ключей.
- EncryptedTextField - CharField, который прозрачно шифрует свое значение по мере его поступления и выхода из базы данных. Шифрование обрабатывается Keyczar. Чтобы использовать это поле, вы должны установить Keyczar, чтобы сгенерировал первичный ключ шифрования и установил параметры. KEYS_DIR установил для полный путь к вашей директории ключей.
Поэтому в основном я должен был установить (1) keyczar и его зависимостей для Python:
pip install https://keyczar.googlecode.com/files/python-keyczar-0.71c.tar.gz
pip install pycrypto
pip install pyasn1
(если у вас нет еще, ... установить Джанго-расширений тоже)
(2) создать каталог, в котором вы будете хранить свои ключи и создать ключи:.
mkdir keys
python path/to/keyczart.py create --location='keys' --purpose='crypt' --name='whatever_name'
python path/to/keyczart.py addkey --location='keys' --status='primary'
(3) Добавьте каталог в свои settings.py в ENCRYPTED_FIELD_KEYS_DIR.
и, наконец, (4) добавить EncryptedCharField или EncrytedTextField к модели:
from django_extensions.db.fields.encrypted import EncryptedCharField
class SocialAccount(models.Model):
platform = models.ForeignKey(SocialPlatformType,
related_name='platforms')
url = models.URLField('Account url', unique=True,
null=True, blank=True)
password = EncryptedCharField(null=True, blank=True, max_length=255)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
def __unicode__(self):
return self.url
Я надеюсь, что кто-то считает, что это полезно.
Посмотрите на: https://github.com/felixsan/django-encrypted-fields – Brandon
@Brandon сделайте это ответом. Это хороший подход – karthikr