2011-09-30 17 views
5

Come eseguire un Mysql SELECT con WHERE e LIKE serach se il campo è AES_ENCYPTED?MYSQL SELECT WHERE LIKE WITH AES_ENCRYPT

Esempio:

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

Fondamentalmente, eseguire una ricerca su una colonna crittografata con il carattere jolly COME su entrambe le estremità della $searchStr

+0

che lingua è? – genesis

+0

(variabile PHP) $ query = (stringa di istruzioni MYSQL) – user963206

risposta

8

Non si può cercare una colonna crittografata senza prima decrittografia.

Avrai bisogno di fare WHERE AES_DECRYPT(like, salt) LIKE '%something%' ma sarà piuttosto lento.

+0

Provato ma non funzionerà ma penso che tu sia sulla strada giusta ... (lento non è un problema come piccola web app) – user963206

+0

I'll 'phrase ·' il commento di cui sopra - Sei una LEGGENDA. Ho avuto un piccolo '=' nel modo in cui, grazie. – user963206

+0

Questo non funziona, qualcuno può suggerire un altro modo per decifrare i valori. – Vicky

3

Ho cercato un modo semplice per utilizzare SELECT LIKE per un campo AES_ENCRYPTED con MySQL. Quello che funziona meglio è:

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

Ho testato questo su MySQL 5 usando PHP 5.

Questo funziona molto bene durante l'elaborazione di diverse migliaia di righe, ma potrebbe non essere l'ideale per tabelle molto grandi dovuti alla decrittazione e alla conversione.

Questo è il codice PHP di base:

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