2014-03-19 70 views
0

Django提供给我们的任何方法加密所有/至少字段,如auth.User模型的first_name,last_name,email_id,就像它在将数据存储到数据库之前如何加密PASSWORD字段一样?加密Django用户模型字段


我的解决方法:

我已经通过文件了&在计算器上几个问题,根据这将有可能继承默认BaseUser模型&定义我们自己MYUSER模型中,我们所希望的方式,通过定义加密&解密字符的自定义字符字段。

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

例如:如果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开发人员那样。我想知道上述两个问题中的任何一个的答案。除非我得到答案,否则我会陷入僵局。在此先感谢,但请亲切我&答案。

+0

是这样的吗? https://github.com/defrex/django-encrypted-fields –

+0

@Bibhas是的,Keyczar也是我可以加密的方式之一。我正在使用PyCrypto的AES实现(我准备好打破我的头并更改代码),是否可以按照我在问题中解释的方式查询文本? – Arun

+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) 

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