Skip to main content

A set of django fields that internally are encrypted using the cryptography.io native python encryption library.

Project description

https://travis-ci.org/lanshark/django-encrypted-model-fields.png

About

This is a fork of https://github.com/foundertherapy/django-cryptographic-fields. It has been renamed, and updated to properly support Python3 and latest versions of Django.

django-encrypted-model-fields is set of fields that wrap standard Django fields with encryption provided by the python cryptography library. These fields are much more compatible with a 12-factor design since they take their encryption key from the settings file instead of a file on disk used by keyczar.

While keyczar is an excellent tool to use for encryption, it’s not compatible with Python 3, and it requires, for hosts like Heroku, that you either check your key file into your git repository for deployment, or implement manual post-deployment processing to write the key stored in an environment variable into a file that keyczar can read.

Getting Started

$ pip install django-encrypted-model-fields

Add “encrypted_model_fields” to your INSTALLED_APPS setting like this:

INSTALLED_APPS = (
    ...
    'encrypted_model_fields',
)

django-encrypted-model-fields expects the encryption key to be specified using FIELD_ENCRYPTION_KEY in your project’s settings.py file. For example, to load it from the local environment:

import os

FIELD_ENCRYPTION_KEY = os.environ.get('FIELD_ENCRYPTION_KEY', '')

To use an encrypted field in a Django model, use one of the fields from the encrypted_model_fields module:

from encrypted_model_fields.fields import EncryptedCharField

class EncryptedFieldModel(models.Model):
    encrypted_char_field = EncryptedCharField(max_length=100)

For fields that require max_length to be specified, the Encrypted variants of those fields will automatically increase the size of the database field to hold the encrypted form of the content. For example, a 3 character CharField will automatically specify a database field size of 100 characters when EncryptedCharField(max_length=3) is specified.

Due to the nature of the encrypted data, filtering by values contained in encrypted fields won’t work properly. Sorting is also not supported.

Generating an Encryption Key

There is a Django management command generate_encryption_key provided with the encrypted_model_fields library. Use this command to generate a new encryption key to set as settings.FIELD_ENCRYPTION_KEY:

./manage.py generate_encryption_key

Running this command will print an encryption key to the terminal, which can be configured in your environment or settings file.

NOTE: This command will ONLY work in a CLEAN, NEW django project that does NOT import encrypted_model_fields in any of it’s apps. IF you are already importing encrypted_model_fields, try running this in a python shell instead:

import os
import base64

new_key = base64.urlsafe_b64encode(os.urandom(32))
print(new_key)

Development Environment

Added Tox for testing with different versions of Django and Python. To get started:

pip install -r requirements/dev.txt

using pyenv add the requisite python interpreters::

pyenv install 3.6.15

pyenv install 3.7.12

pyenv install 3.8.12

pyenv install 3.9.10

pyenv install 3.10.2

Add the requisite versions to the local version::

pyenv local 3.6.15 3.7.12 3.8.12 3.9.10 3.10.2

Run tox::

tox

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-encrypted-model-fields-0.6.1.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file django-encrypted-model-fields-0.6.1.tar.gz.

File metadata

  • Download URL: django-encrypted-model-fields-0.6.1.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.9.5

File hashes

Hashes for django-encrypted-model-fields-0.6.1.tar.gz
Algorithm Hash digest
SHA256 cef683c1cb16a635b5ed1261d4e1d82faadc1bdeadc489854a2992c48e8f4dfc
MD5 902d3cf9b734ca90c6943f6ca08b1d16
BLAKE2b-256 399bdfe4f7e2e52e68c5d9496f3b5c024bbcbfc0e547fd4fc4356175dbb1f25e

See more details on using hashes here.

File details

Details for the file django_encrypted_model_fields-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: django_encrypted_model_fields-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.9.5

File hashes

Hashes for django_encrypted_model_fields-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f9b35b4b4c344f4d3d173828be58a468ff016d7656ea1fb8f6954f3b77bef918
MD5 5370a9c18c13e7e5da071b75e64bdda6
BLAKE2b-256 2e5a7bc45c96b36531fa9534bf2ee3d4aa305ab760aaee4a82997de3441f0447

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page