使用pgcrypto加密字段的Python和Django工具。
项目描述
django-pgcrypto
一套处理ASCII装甲(http://www.ietf.org/rfc/rfc2440.txt)和填充的实用函数,以及一组利用这些函数且与pgcrypto函数兼容的Django字段类。
安装
pip install django-pgcrypto
快速入门
您可以使用(大多数情况下)与普通Django字段相同的方式使用几个加密版本的Django字段
from django.db import models
import pgcrypto
class Employee (models.Model):
name = models.CharField(max_length=100)
ssn = pgcrypto.EncryptedTextField()
pay_rate = pgcrypto.EncryptedDecimalField()
date_hired = pgcrypto.EncryptedDateField(key="datekey", auto_now_add=True)
如果创建字段时未指定(如上例中的ssn
和pay_rate
),则字段将根据以下设置进行加密
PGCRYPTO_DEFAULT_CIPHER
(目前仅支持aes
) - 加密字段时使用的默认算法。PGCRYPTO_DEFAULT_KEY
(默认:settings.SECRET_KEY
) - 加密时使用的默认密钥。
您还必须确保数据库中已安装pgcrypto扩展。Django通过CryptoExtension迁移使这变得很容易。
查询
您可以通过exact
、gt
、gte
、lt
和lte
查找来对加密字段进行过滤,就像对普通字段进行过滤一样。例如,可以像这样查询上述模型
Employee.objects.filter(date_hired__gt="1981-01-01", salary__lt=60000)
注意事项
此库以与pgcrypto的原始加密函数兼容的方式加密和编码数据。所有关于使用直接密钥和完整性检查不足的警告都适用于此处。
这个库早于Django的BinaryField,因此字段本质上是以TextField
存储加密数据的。这可能或可能不适合您的应用程序,并且未来的假设版本可能会包括一个切换来存储二进制数据。