2014-03-19 104 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的粗魯方式,但對於給定的條件,這只是可用的解決方案。