est-ce possible?Django: recherche sur un EncryptedCharField (django-extensions), est-ce possible?
Pour un modèle avec EncryptedCharField nommé "prénom" je remarque que le champ ne décrypte pas lorsque je le recherche. Dans tous les autres cas, c'est bien. Cela ne fonctionne pas:
if form.is_valid():
cd = form.cleaned_data
search_results = MyTable.objects.filter(first_name__icontains=cd['search_term'])
est-ce intentionnellement ou est-ce que je fais quelque chose de mal? merci pour votre aide ...
Crypter le terme de recherche en premier, même si la valeur décryptée exacte, ne fonctionnerait pas car le chiffre ne sera pas le même que celui enregistré dans la base de données. Donc, cela ne fonctionnerait pas:
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)
Donc cela fonctionne-t-il pour 'first_name__istartswith = cd ['search_term']'? –
Je suppose que ce n'est pas possible car avec toutes les autres fonctions de recherche, la valeur est probablement cryptée en premier, puis comparée à la valeur de la base de données. Cela fonctionnerait pour «_exact» à tout le moins. Je ne sais pas exactement comment cela fonctionnerait avec '_iexact' honnêtement, puisque la plupart des méthodes de chiffrement traiteront complètement' A' et 'a' complètement différemment. –
Oui c'est ce que fait, EncryptedCharField's get_db_prep_value() encrypt la valeur et to_python() décrypte. Ils utilisent keyczar. Mais quand je teste dans un shell, crypter une valeur deux fois, en utilisant la même clé, ne génère pas le même chiffre. Mais bien sûr, le chiffrement décrypte toujours correctement. Donc __exact ne fonctionnerait pas, ni __istartswith. Bien qu'absurde, cela "fonctionne" si je ne crypte pas le chiffre et utilise une partie du chiffre stocké comme terme de recherche. – erikvw