【问题标题】:Encrypting Django User Model Fields加密 Django 用户模型字段
【发布时间】: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


【解决方案1】:

我尝试了很多,如果字段被加密,没有发现查询部分匹配的有用答案。所以我不得不在 Python 中执行此操作(找不到其他方法)。

这种解决方法只有在我们使用的数据库很小的情况下才能正常工作,否则会带来性能成本。

从数据库中查询所有元组,使用python进行部分匹配。

result = []
temp_result = MyModel.objects.all()
for temp in temp_result:
    if query.lower() in temp.first_name.lower():
        result.append(temp)

或类似上面的东西。我知道这是粗鲁的查询方式,但对于给定的条件,这只是可用的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 2016-09-11
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多