MYSQL ВЫБЕРИТЕ, ГДЕ НРАВИТСЯ С AES_ENCRYPT - PullRequest
5 голосов
/ 30 сентября 2011

Как мне выполнить Mysql SELECT с WHERE и LIKE serach, если поле AES_ENCYPTED?

Пример:

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

По сути, выполните поиск по зашифрованному столбцу с подстановочным знаком LIKE на обоих концах $searchStr

Ответы [ 2 ]

8 голосов
/ 30 сентября 2011

Вы не можете искать в зашифрованном столбце, не расшифровав его.

Вам нужно будет сделать WHERE AES_DECRYPT(like, salt) LIKE '%something%', но это будет довольно медленно.

4 голосов
/ 08 февраля 2012

Я искал простой способ использовать SELECT LIKE для поля AES_ENCRYPTED с MySQL. Лучше всего работает:

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

Я проверил это на MySQL 5, используя PHP 5.

Это работает очень хорошо при обработке нескольких тысяч строк, но может не подойти для очень больших таблиц из-за дешифрования и преобразования.

Это основной код PHP:

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