Quindi prima il primo avvertimento:
If data is secure, it cannot be searched against, only checked
against.
Ora riguardo alla ricerca: Non esiste un modo valido per cercare campi crittografati o con hash, manterrà SEMPRE la CPU . C'è una ragione per questo: i tuoi dati sono in una strada a senso unico. Viene recuperato in memoria, verificato, la versione in memoria distrutta e la voce meno i dati che non è possibile inviare viene inviata. Questo è per scopi di sicurezza e scopi di correzione degli attacchi. Quindi, si pone la domanda "Come faccio a fare una ricerca contro di essa?" Letteralmente una voce alla volta. Perché ogni hash o crittografia dovrebbe essere univoca e mai ripetibile se non confrontata con con il valore iniziale, devi recuperare tutti gli oggetti crittografati, passarli attraverso fino a quando non ottieni una corrispondenza e quindi restituire l'id o la chiave di quella voce. È lungo, tirato fuori, fastidioso e sicuro? Sì. Questo può essere fatto più velocemente o meglio? Non proprio.
Ulteriori avvisi:
NON CONSERVARE MAI UN TAVOLO RAINBOW! Queste sono vulnerabilità facilmente risolte ( Non credermi? )
NON CONSERVARE MAI I SALI NEL DATABASE! Se i dati nel loro complesso vengono rubati, questa crittografia è ora worthless
Se i dati devono essere * veramente sicuri **, cancellarli tramite un algoritmo di hashing unidirezionale (come bcrypt)
SE DEVI cercare tra i dati crittografati, utilizzare un programma di decrittografia separato per decrittografare i dati, effettuare la ricerca e rispedirli nuovamente in un'app binaria compilata e compilata. In questo modo se il server pubblico non ha visitatori indesiderati, non è in grado di ottenere tali dati, la chiave è ancora protetta e i tuoi dati sono al sicuro.