【发布时间】:2014-04-25 11:04:23
【问题描述】:
有什么方法 Django 为我们提供了加密所有/至少字段,例如 auth.User 模型的 first_name、last_name、email_id,就像它在将 PASSWORD 字段存储到数据库之前对其进行加密一样?
我的解决方法:
我已经阅读了有关 StackOverflow 的文档和几个问题,根据这些问题,可以通过定义加密和解密字符的自定义字符字段来继承默认的 BaseUser 模型并以我们想要的方式定义我们自己的 myUser 模型。
问题出在我的应用程序中,我提供了 SEARCH 选项,以便轻松访问字符字段。如果我加密所有这些字符字段,我很难查询搜索选项。
例如:如果 ABCD、ABCDE、ABC 是数据库中的字符串并且用户希望知道所有具有 BC 的此类条目,则不会弹出任何结果。原因是 ABCD、ABCDE、ABC 中的每一个都加密为不同/唯一的字符串(我使用的是 PyCrypto 提供的 AES 加密)。 BC 也被加密为一些与 ABCD、ABCDE、ABC 没有相似性的唯一字符串(原因很明显,我使用密钥长度为 32 的 AES 算法)。而我写的查询就像
MyModel.objects.filter(first_name__icontains='BC')
不会返回任何结果。 (是的,我希望搜索不区分大小写)。
[注意:我在自定义字段中添加了所有必需的方法,如“to_python”、“get_db_prep_value”,还尝试了查找方法。但是,实际问题是每个字符串都被加密为相同长度的 AES 中的唯一字符]
由于我是 Django 新手,我的问题可能不像 Django 开发人员那样。我想知道以上两个问题中的任何一个的答案。除非我得到答案,否则我会陷入僵局。在此先感谢,但请善待我并回答。
【问题讨论】:
-
@Bibhas 是的,Keyczar 也是我可以加密的方法之一。我正在使用 PyCrypto 的 AES 实现(我准备打破我的头脑并更改代码),是否可以像我在问题中解释的那样查询文本?
-
文档中没有解释。你可以试一试。只需实现一个字段并进行测试。
-
据我检查,字段的实现方式具有前缀代码,它们也取决于 Keyczar 中的长度。不,不再适用于查询。
-
Django 扩展提供了一些使用 Keyczar 加密的字段django-extensions.readthedocs.org/en/latest/…
标签: django python-2.7 encryption django-models cryptography