加密Django用户模型字段

时间:2014-03-19 09:47:25

标签: django python-2.7 encryption django-models cryptography

Django有没有提供加密所有/至少字段的方法,如auth.User模型的first_name,last_name,email_id,就像它在将PASSWORD字段存入数据库之前加密PASSWORD字段一样?


我的解决方法:

我已经阅读了文档&关于StackOverflow的几个问题,根据它可以继承默认的BaseUser模型&通过定义加密和自定义的自定义字符字段,按照我们想要的方式定义我们自己的myUser模型。解密字符。

问题出在我的应用程序中,我提供了SEARCH选项,可以轻松访问字符字段。如果我加密所有这些Char字段,我很难查询搜索选项。

例如:如果ABCD,ABCDE,ABC是数据库中的字符串&用户希望知道所有具有BC的条目,没有结果弹出。原因是每个ABCD,ABCDE,ABC加密到不同/唯一的字符串(我使用PyCrypto提供的AES加密)。 BC也被加密为一些唯一的字符串,它与ABCD,ABCDE,ABC之间没有相似之处(显然我使用AES算法,密钥长度为32)。我写的查询就像

MyModel.objects.filter(first_name__icontains='BC')

不会返回任何结果。 (是的,我希望搜索不区分大小写。)

[注意:我在自定义字段中添加了所有必需的方法,如“to_python”,“get_db_prep_value”,也尝试了查找方法。但是,实际问题是每个字符串都被加密为相同长度的AES中的唯一字符]

由于我是Django的新手,我的问题可能不像Django开发人员那样。我想知道上述两个问题中的任何一个的答案。除非我得到答案,否则我陷入僵局。在此先感谢,但请善待我和他。答案。

1 个答案:

答案 0 :(得分:0)

我尝试了很多,如果字段是加密的,则没有找到有用的答案来查询部分匹配。所以我必须在Python中做到这一点(找不到其他方法)。

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

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

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

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