Skip to main content

Django Encrypted Model Fields

image

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.

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)

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.

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

Release files for django-encrypted-model-fields 0.6.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-encrypted-model-fields 0.6.5
File Size Uploaded
django-encrypted-model-fields-0.6.5.tar.gz 7.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-encrypted-model-fields 0.6.5
File Interpreter ABI Platform
django_encrypted_model_fields-0.6.5-py3-none-any.whl Python 3 none any Details

Total release size: 16.2 kB

Release files / django-encrypted-model-fields-0.6.5.tar.gz

Download URL django-encrypted-model-fields-0.6.5.tar.gz
Size 7.3 kB
Tags Source
SHA-256 checksum
How to use checksums
8bd21c5565c0d64ec4dbd375ad34fea68b4da2db871dec3fa71fe7b5e4221c99
BLAKE2b-256 checksum
How to use checksums
3544e4273d48f406b23604cf946912421583a659044d5e521799d1cfd74222c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.2 Linux/4.15.0-142-generic

Release files / django_encrypted_model_fields-0.6.5-py3-none-any.whl

Download URL django_encrypted_model_fields-0.6.5-py3-none-any.whl
Size 8.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b21bbdd8ae2e1a0ea37a5049b3ba46e6e63bf287ad241219a058fac1070796cc
BLAKE2b-256 checksum
How to use checksums
e4361b86079a489f181e33bd83600127e7b3b73c66cd609ac672e58de93ed9a9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.2 Linux/4.15.0-142-generic

Release history Release notifications | RSS feed

This release

0.6.5 This release

2 release files

0.6.3

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page