2011-09-30 19 views
5

¿Cómo realizaría un Mysql SELECT con WHERE y LIKE serach if field are AES_ENCYPTED?MYSQL SELECCIONAR DONDE TIENEN GUSTO CON AES_ENCRYPT

Ejemplo:

SELECT AES_DECRYPT(place,'"+salt+"'),AES_DECRYPT(web_address,'"+salt+"') 
FROM access 
WHERE place= LIKE '%(AES_ENCRYPT('"+searchStr+"','"+salt+"'))',%') 

Básicamente, realizar una búsqueda en una columna de cifrado con el comodín LIKE en ambos extremos de la $searchStr

+0

qué idioma es? – genesis

+0

(variable PHP) $ query = (cadena de instrucción MYSQL) – user963206

Respuesta

8

No se puede buscar en una columna de cifrado sin primero descifrarlos.

Tendrá que hacer WHERE AES_DECRYPT(like, salt) LIKE '%something%', pero va a ser bastante lento.

+0

Lo intenté pero no funcionará, pero creo que estás en el camino correcto ... (lento no es un problema como una pequeña aplicación web) – user963206

+0

Voy a 'frasear' el comentario anterior - Eres una LEYENDA. Tuve un "=" menor en el camino, gracias. – user963206

+0

Esto no funciona, ¿alguien puede sugerir alguna otra forma de descifrar los valores? – Vicky

3

He estado buscando una manera simple de usar el SELECCIONAR SIMILAR para un campo AES_ENCRYPTED con MySQL. El que mejor funciona es:

SELECT * FROM table 
WHERE CONVERT(AES_DECRYPT(`haystack`,'key') USING utf8) LIKE '%needle%' 

he probado esto en MySQL 5 usando PHP 5.

Esto funciona muy bien en el tratamiento de varios miles de filas, pero puede no ser ideal para tablas muy grandes debido para el descifrado y la conversión.

Este es el código PHP básica:

$key = md5("yourchosenkey".$salt);  
$query = "SELECT * FROM ".$tableName." ". 
     "WHERE CONVERT(AES_DECRYPT(`haystack`,'".$key."') USING utf8) ". 
     "LIKE '%".addslashes($needle)."%'"; 
Cuestiones relacionadas