gpt4 book ai didi

Django:搜索 EncryptedCharField(django-extensions),这可能吗?

转载 作者:行者123 更新时间:2023-12-04 03:14:24 27 4
gpt4 key购买 nike

这可能吗?

对于具有名为“first_name”的 EncryptedCharField 的模型,我注意到当我搜索该字段时该字段不会解密。在所有其他用途中都很好。这不起作用:

if form.is_valid():
cd = form.cleaned_data
search_results = MyTable.objects.filter(first_name__icontains=cd['search_term'])

这是设计使然还是我做错了什么?谢谢你的帮助...

首先加密搜索词,即使是准确的解密值,也不会起作用,因为密码不会与存储在数据库中的密码相同。所以这是行不通的:

crypter = Crypter.Read(settings.ENCRYPTED_FIELD_KEYS_DIR)
if form.is_valid():
cd = form.cleaned_data
cipher = crypter.Encrypt(cd['search_term'])
search_results = MyTable.objects.filter(first_name__icontains=cipher)

最佳答案

当某些东西被加密时(或者至少,当它被正确地完成时),在不知道该值的情况下不可能获得已加密的值。这意味着虽然您可以非常快速地检查密码的值,但由于用户已经给了您密码的值,所以很难从加密的字符串中找出密码的值。这是 P=NP 的一部分主题。

当您通过 MyTable.objects.filter(first_name=cipher) 搜索 say 时,您只是在比较加密的字符串,这很好。但是,当您尝试 MyTable.objects.filter(first_name_icontains=cipher) 时,您要求 Django 解密所有值,比较它们,然后返回匹配项。但是,django 不能这样做,因为没有人知道解密后的 first_name 字段的值是多少。这是设计使然,因为这意味着即使数据库遭到破坏,数据也是安全的(这也是为什么你应该提防任何会向你显示密码的网站或组织,因为这意味着他们没有加密他们的值(value)数据库)。总的来说,看不到用户密码是一件好事,即使您不同意,为良好的安全性付出的代价也很小。

关于Django:搜索 EncryptedCharField(django-extensions),这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4324837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com