12.09.2011, 15:20 | #1 | |||
Вредина
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
|
MySQL AES_ENCRYPT и поиск
Господа, может кто знает как правильно смазать лыжи, чтобы ехали.
Есть БД зашиврованная AES алгоритмом, нужно в ней поискать кое чего: Делаем запрос: Цитата:
Другой: Цитата:
Еще другой: Цитата:
В общем перебрал кучу вариантов. Интернеты молчат, хочу очень пример.
__________________
|
|||
12.09.2011, 17:26 | #3 |
Вредина
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
|
seocore, так нужно, софтинка у заказчика написана на это двигле, требуется сделать поиск. Пока мысли только во время поиска все перекладывать в tmp_db в не зашифрованном виде и после поиска удалять, но такой вариант только после того, как получу подтверждение, что изначальная задача не реализуема.
Добавлено через 53 минуты Ну и ладно ... PHP код:
mysql_query($sql_tmp1); Главное в этой задаче результат
__________________
Последний раз редактировалось Jooz; 12.09.2011 в 17:26. Причина: Добавлено сообщение |
12.09.2011, 17:46 | #4 |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 281
|
Попробуйте SELECT *, AES_DECRYPT(Title,'".$skey."') AS DecryptedTitle, AES_DECRYPT(Preview,'".$skey."') AS DecryptedPreview FROM `baza` having `DecryptedTitle` REGEXP '".$_POST['search']."'
Добавлено через 4 минуты P.S: еще $_POST['search'] надо заэскейпить, иначе это место для SQL инъекции.
__________________
If it's not great, it's not the end. Последний раз редактировалось Alexey; 12.09.2011 в 17:46. Причина: Добавлено сообщение |
12.09.2011, 19:06 | #5 |
Вредина
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
|
Alexey, какие иньекции - софт локальный для 1-ного пользователя! Точнее пользователей много но у каждого своя версия базы.
Возвращает Zero, как и прочие запросы.
__________________
|
12.09.2011, 19:46 | #6 |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 281
|
Код:
[root@server2 ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 45796 Server version: 5.0.92 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database crypt; Query OK, 1 row affected (0.06 sec) mysql> \u crypt Database changed mysql> create table `enc_test` (Title BLOB(200), Preview BLOB(200)); Query OK, 0 rows affected (0.02 sec) mysql> insert into `enc_test` VALUES (AES_ENCRYPT('test title','testkey'),AES_ENCRYPT('testpreview','testkey')); Query OK, 1 row affected (0.00 sec) mysql> select AES_DECRYPT(`Title`,'testkey') as Title, AES_DECRYPT(`Preview`,'testkey') as Preview from `enc_test` WHERE Title REGEXP '.*'; +------------+-------------+ | Title | Preview | +------------+-------------+ | test title | testpreview | +------------+-------------+ 1 row in set (0.00 sec)
__________________
If it's not great, it's not the end. |
13.09.2011, 01:13 | #7 |
Вредина
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
|
Не буду проверять, уже забил, но как вариант BLOB, но более точный вариант WHERE Title REGEXP '.*'
Разумеется он вернет как минимум одну строку, а как максимум все строки которые есть. А вот так: WHERE Title REGEXP 'test' - искать не будет. Звездочка то хоть шифруй хоть не шифруй всегда TRUE, не смотря на содержимое
__________________
|
13.09.2011, 09:30 | #8 |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 281
|
По поводу WHERE Title REGEXP 'test' вот что имеем:
Код:
mysql> select AES_DECRYPT(`Title`,'testkey') as Title, AES_DECRYPT(`Preview`,'testkey') as Preview from `enc_test` WHERE Title REGEXP 'test'; Empty set (0.00 sec) mysql> select AES_DECRYPT(`Title`,'testkey') as Title, AES_DECRYPT(`Preview`,'testkey') as Preview from `enc_test` HAVING Title REGEXP 'test'; +------------+-------------+ | Title | Preview | +------------+-------------+ | test title | testpreview | +------------+-------------+ 1 row in set (0.00 sec) Проблема с оператором WHERE связана с тем что при выполнении запроса блок выполняются сначала блок Where, потом блок from, потом HAVING. Т.е. при вашей записи блок WHERE отрабатывает до функции AES_DECRYPT, потому REGEXP идет по закодирвоанным данным, в которых конечно же ничего не находит. Если переформулировать запрос так (вынеся шифрование в блок WHERE), то все будет работать: Код:
mysql> select AES_DECRYPT(`Title`,'testkey') as Title, AES_DECRYPT(`Preview`,'testkey') as Preview from `enc_test` WHERE AES_DECRYPT(`Title`,'testkey') REGEXP 'test'; +------------+-------------+ | Title | Preview | +------------+-------------+ | test title | testpreview | +------------+-------------+ 1 row in set (0.01 sec)
__________________
If it's not great, it's not the end. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
поиск страниц в сапе по урл или релевантный поиск | 10012003 | Пожелания пользователей системы | 5 | 30.11.2010 20:32 |
Вопрос по mysql | wUUb | Разработка и сопровождение сайтов | 9 | 31.08.2009 06:12 |
PHP и MySql | Eras_er | Разработка и сопровождение сайтов | 2 | 06.03.2009 16:50 |
Копия MySQL | DRIVER | Разработка и сопровождение сайтов | 10 | 06.01.2009 15:50 |
Не работает контекстный поиск, не работает поиск со словами "быстрый поиск"... | Archy | Ошибки при работе с системой | 0 | 14.07.2008 16:11 |
Часовой пояс GMT +3, время: 20:43.