这是一个使用PyNaCl加密的Django模型字段类集合。
项目描述
Django NaCl加密字段
这是一个使用PyNaCl加密的Django模型字段类集合。此包主要基于django-encrypted-fields,该包使用过时的Keyczar库来加密字段。除此之外,它还受到django-fernet-field的启发。
关于PyNaCl
PyNaCl是libsodium的Python绑定,而libsodium是Networking and Cryptography库的一个分支。这些库的目标是提高可用性、安全性和速度。
入门
安装django-nacl-fields
pip install django-nacl-fields
将nacl_encrypted_fields
添加到您的INSTALLED_APPS
INSTALLED_APPS = [
...
'nacl_encrypted_fields'
...
]
创建用于加密的密钥
$ python manage.py createkey
# put the following line in your settings.py:
NACL_FIELDS_KEY = b'p1Et2Rb@;^BYdo`ZRFi!Hc-MXu(^|bVqA-FGqffM'
在您的settings.py
NACL_FIELDS_KEY = b'p1Et2Rb@;^BYdo`ZRFi!Hc-MXu(^|bVqA-FGqffM'
然后,在您的models.py
from django.db import models
from nacl_encrypted_fields.fields import NaClTextField
class MyModel(models.Model):
text_field = NaClTextField()
像平常一样使用该模型,数据将被加密存储在数据库中。
注意:加密数据不能用于查询或排序。在 SQL 中,这些数据都将看起来像带有随机文本的文本字段。
您也可以在创建时自动将字段密钥追加到设置文件中,使用 -f
标志。
python manage.py createkey -f settings.py
settings.py
是您设置文件的路径。
可用字段
目前内置且经过单元测试的字段。
NaClCharField
NaClTextField
NaClDateTimeField
NaClIntegerField
NaClFloatField
NaClEmailField
NaClBooleanField
NaClJSONField
加密您的字段
通过使用提供的 NaClFieldMixin
可以创建新字段。
from django.db import models
from nacl_encrypted_fields import NaClFieldMixin
class NaClIPAddressField(NaClFieldMixin, models.IPAddressField):
pass
请在尝试此操作时遇到任何问题请报告。
贡献
使用以下命令启动用于测试的 PostgreSQL Docker 容器:
docker run --rm -e POSTGRES_PASSWORD=postgres POSTGRES_DB=github_actions postgres
然后,您可以在另一个窗口中使用以下命令运行测试:
python -m venv env
source env/bin/activate
pip install '.[test]'
python manage.py test
在您贡献之前,请确保对您的代码进行代码审查。
pip install '.[lint]'
flake8 --exclude .git,pycache,docs/conf.py,build,dist,env
您的代码完成后,请随时发起新的 pull request。