sql >> Base de Datos >  >> RDS >> Mysql

Cripta de Laravel - Comparación de valores

Como se describe, no se puede. La respuesta que ha dado es la forma en que lo lograría si no necesitara optimizarlo.

Si necesita optimizarlo sin completamente comprometer el valor cifrado y haber creado un perfil para encontrar la cantidad de datos devueltos y procesados ​​por su filtro es una de las principales causas de retraso, puede hacer lo siguiente.

Agregue un nuevo campo a la tabla que almacenará un subconjunto de un hash. Dependiendo de la cantidad de direcciones de correo electrónico únicas, puede ajustar el tamaño de este subconjunto. Nota:cuanto más pequeño, mejor, ya que está filtrando información sobre el valor cifrado con este enfoque. Por ejemplo, si almacena un hash de 1 byte de la dirección de correo electrónico, está reduciendo la entropía del cifrado en ~8 bits.

Cuando realice una consulta, primero cree el subconjunto del hash del correo electrónico y coloque un where cláusula para devolver solo esas filas.

Todo esto supone que la función hash es más barata que el paso de descifrado. Este enfoque requeriría que vuelva a calcular todos los subconjuntos de hash si desea aumentar su tamaño, por lo que es importante elegir un tamaño que aumente significativamente el rendimiento, no comprometa indebidamente el cifrado y probablemente no necesite cambiar a medida que crece. .

Nota:no debe usar un hash directo como MD5 en esta situación. No por su susceptibilidad a las colisiones, sino porque el espacio clave será muy pequeño. Si el rendimiento es importante y almacena grandes cantidades de datos, se abre a los ataques de DOS en los que el atacante crea grandes cantidades de direcciones de correo electrónico que generan hash en el mismo subconjunto. Para mejorar este problema, use un HMAC función con una clave secreta.

Recuerde, a menos que tenga verdaderas razones de rendimiento para necesitar agregar complejidad, no lo haga