2011-09-30 14 views
5

Jak wykonać MYSQL SELECT z WHERE i LIKE serach, jeśli pole jest AES_ENCYPTED?WYBIERZ MYSQL GDZIE ZAES_ENCRYPT

Przykład:

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

Zasadniczo przeprowadzić wyszukiwanie w zaszyfrowanym kolumnie z LIKE zamiennika na obu końcach $searchStr

+0

jakim języku to jest? – genesis

+0

(zmienna PHP) $ query = (ciąg instrukcji MySQL) – user963206

Odpowiedz

8

nie można wyszukiwać na zaszyfrowanym kolumny bez uprzedniego odszyfrowywania go.

Będziesz musiał wykonać WHERE AES_DECRYPT(like, salt) LIKE '%something%', ale będzie to dość powolne.

+0

Próbowałem, ale nie będę działać, ale myślę, że jesteś na dobrej drodze ... (powolne nie jest problemem jako mała aplikacja internetowa) – user963206

+0

Będę "frazować" powyższy komentarz - jesteś LEGENDĄ. Miałem drobne "=" w drodze, dziękuję. – user963206

+0

To nie działa, czy ktoś może zaproponować inny sposób odszyfrowania wartości. – Vicky

3

Szukałem prostego sposobu użycia SELECT LIKE dla pola AES_ENCRYPTED z MySQL. Ten, który działa najlepiej jest:

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

ja testowałem to na MySQL 5 PHP 5.

To działa bardzo dobrze przy obróbce kilka tysięcy wierszy, ale nie może być idealnym rozwiązaniem dla bardzo dużych tabel należnych do deszyfrowania i konwersji.

Jest to podstawowy kod PHP:

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