Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Cripta Laravel - Comparando Valores


Conforme descrito, você não pode. A resposta que você deu é a maneira como você a alcançaria se não precisasse otimizá-la.

Se você precisar otimizá-lo sem completamente comprometer o valor criptografado e ter perfilado para descobrir que a quantidade de dados retornados e processados ​​pelo seu filtro é uma das principais causas de atraso, você pode fazer o seguinte.

Adicione um novo campo à tabela que armazenará um subconjunto de um hash. Dependendo do número de endereços de e-mail exclusivos, você pode ajustar o tamanho desse subconjunto. Nota:Quanto menor, melhor, pois você está vazando algumas informações sobre o valor criptografado usando essa abordagem. Por exemplo, se você armazenar um hash de 1 byte do endereço de e-mail, estará reduzindo a entropia da criptografia em ~8 bits.

Ao consultar, primeiro crie o subconjunto do hash de email e coloque um where cláusula para retornar apenas essas linhas.

Tudo isso pressupõe que a função hash é mais barata que a etapa de descriptografia. Essa abordagem exigiria que você recalculasse todos os subconjuntos de hash se quisesse aumentar seu tamanho, portanto, é importante escolher um tamanho que aumente significativamente o desempenho, não comprometa indevidamente a criptografia e provavelmente não precisará ser alterado à medida que você cresce .

Nota:Você não deve usar um hash direto como MD5 nesta situação. Não por causa de sua suscetibilidade a colisões, mas porque o espaço da chave será muito pequeno. Se o desempenho é importante e você armazena grandes quantidades de dados, você abre ataques de DOS em que o invasor cria grandes quantidades de endereços de e-mail que fazem hash para o mesmo subconjunto. Para evitar esse problema, use um HMAC função com uma chave secreta.

Lembre-se, a menos que você tenha motivos reais de desempenho para precisar adicionar complexidade - não