Dato che Laravel's Crypt
aggiunge sempre sale, quindi non esistono due istanze della stessa crittografia uguali.Cripta di Laravel - Confronto dei valori
Normalmente, questo va bene perché posso confrontare la versione decifrata dei due. Tuttavia, cosa succede se voglio cercare un valore che è criptato nel database?
Dire che ho un tavolo users
e vorrei criptare l'indirizzo email. Ora voglio trovare qualcuno tramite l'e-mail [email protected]
.
Come faccio a scrivere la query per questo? Non riesco solo a Crypt::encrypt($email)
e ricerca poiché questa iterazione di encrypt
sarà diversa da quella nel DB.
Modifica
Attualmente, l'unica cosa che posso pensare è quello di ottenere tutti, e filtrare attraverso di loro:
$match = User::all()->filter(function($record) use($email) {
$field = $record->email['email'];
if(Crypt::decrypt($field) == $email) return $record;
});
ma questo è terribile. Non voglio cercare in tutto.
Credo che l'unico modo per aggirare questo sarebbe per crittografare i dati utilizzando un 'key' fisso e' iv'. Non sarebbe difficile estendere la classe Crypt per farlo. – Jeemusu
Si potrebbe prendere in considerazione l'aggiunta di un'altra colonna con un hash della posta elettronica che è possibile confrontare. –