Вернуться   Форум SAPE.RU > Общие вопросы > Разработка и сопровождение сайтов

-->
Ответ
 
Опции темы
Старый 12.09.2011, 15:20   #1
Вредина
 
Аватар для Jooz
 
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
Jooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущее
Question MySQL AES_ENCRYPT и поиск

Господа, может кто знает как правильно смазать лыжи, чтобы ехали.

Есть БД зашиврованная AES алгоритмом, нужно в ней поискать кое чего:

Делаем запрос:

Цитата:
SELECT *, AES_DECRYPT(Title,'".$skey."') AS Title, AES_DECRYPT(Preview,'".$skey."') AS Preview FROM baza WHERE AES_ENCRYPT(Title,'$skey') REGEXP '".$_POST['search']."'
Не фунциклирует:

Другой:

Цитата:
SELECT *, AES_DECRYPT(Title,'".$skey."') AS Title, AES_DECRYPT(Preview,'".$skey."') AS Preview FROM baza WHERE Title REGEXP '".$_POST['search']."'
Тоже не фунциклирует.

Еще другой:

Цитата:
Title REGEXP AES_DECRYPT('".$_POST['search']."','".$skey."')
Тоже не фунциклирует

В общем перебрал кучу вариантов.

Интернеты молчат, хочу очень пример.
__________________
Чтобы произошло чудо нужно обязательно дунуть. Если не дунуть - чуда не произойдет!
Jooz вне форума   Ответить с цитированием
Старый 12.09.2011, 16:24   #2
Эксперт
 
Аватар для seocore
 
Регистрация: 18.06.2007
Адрес: Картофель
Сообщений: 2,417
Вес репутации: 361
seocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущееseocore - прекрасное будущее
По умолчанию

Цитата:
Сообщение от Jooz Посмотреть сообщение
Есть БД зашиврованная AES алгоритмом
может лучше диагноз у психиатров уточнить?
seocore вне форума   Ответить с цитированием
Старый 12.09.2011, 17:26   #3
Вредина
 
Аватар для Jooz
 
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
Jooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущее
По умолчанию

seocore, так нужно, софтинка у заказчика написана на это двигле, требуется сделать поиск. Пока мысли только во время поиска все перекладывать в tmp_db в не зашифрованном виде и после поиска удалять, но такой вариант только после того, как получу подтверждение, что изначальная задача не реализуема.

Добавлено через 53 минуты
Ну и ладно ...

PHP код:
$sql_tmp1="DROP TABLE IF EXISTS bazatmp";
$sql_tmp2="CREATE TABLE bazatmp AS (SELECT * FROM baza)";
$sql_tmp3="UPDATE bazatmp SET Title = AES_DECRYPT(Title,'".$skey."')";
$sql_tmp4="UPDATE bazatmp SET Preview = AES_DECRYPT(Preview,'".$skey."')";

mysql_query($sql_tmp1);
mysql_query($sql_tmp2);
mysql_query($sql_tmp3);
mysql_query($sql_tmp4); 
... поиск

mysql_query($sql_tmp1);

Главное в этой задаче результат
__________________
Чтобы произошло чудо нужно обязательно дунуть. Если не дунуть - чуда не произойдет!

Последний раз редактировалось Jooz; 12.09.2011 в 17:26. Причина: Добавлено сообщение
Jooz вне форума   Ответить с цитированием
Старый 12.09.2011, 17:46   #4
Мне повезёт!
 
Аватар для Alexey
 
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 281
Alexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущее
По умолчанию

Попробуйте 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 инъекции.
__________________
Everything will be great in the end.
If it's not great, it's not the end.

Последний раз редактировалось Alexey; 12.09.2011 в 17:46. Причина: Добавлено сообщение
Alexey вне форума   Ответить с цитированием
Старый 12.09.2011, 19:06   #5
Вредина
 
Аватар для Jooz
 
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
Jooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущее
По умолчанию

Alexey, какие иньекции - софт локальный для 1-ного пользователя! Точнее пользователей много но у каждого своя версия базы.
Цитата:
Сообщение от Alexey Посмотреть сообщение
Попробуйте SELECT *, AES_DECRYPT(Title,'".$skey."') AS DecryptedTitle, AES_DECRYPT(Preview,'".$skey."') AS DecryptedPreview FROM `baza` having `DecryptedTitle` REGEXP '".$_POST['search']."'
Возвращает Zero, как и прочие запросы.
__________________
Чтобы произошло чудо нужно обязательно дунуть. Если не дунуть - чуда не произойдет!
Jooz вне форума   Ответить с цитированием
Старый 12.09.2011, 19:46   #6
Мне повезёт!
 
Аватар для Alexey
 
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 281
Alexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущее
По умолчанию

Код:
[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)
Все работает.
__________________
Everything will be great in the end.
If it's not great, it's not the end.
Alexey вне форума   Ответить с цитированием
Старый 13.09.2011, 01:13   #7
Вредина
 
Аватар для Jooz
 
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
Jooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущее
По умолчанию

Цитата:
Сообщение от Alexey Посмотреть сообщение
BLOB(200)
Не буду проверять, уже забил, но как вариант BLOB, но более точный вариант WHERE Title REGEXP '.*'
Разумеется он вернет как минимум одну строку, а как максимум все строки которые есть. А вот так: WHERE Title REGEXP 'test' - искать не будет. Звездочка то хоть шифруй хоть не шифруй всегда TRUE, не смотря на содержимое
__________________
Чтобы произошло чудо нужно обязательно дунуть. Если не дунуть - чуда не произойдет!
Jooz вне форума   Ответить с цитированием
Старый 13.09.2011, 09:30   #8
Мне повезёт!
 
Аватар для Alexey
 
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 281
Alexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущее
По умолчанию

По поводу 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)
Т.е. как я вам и сказал выше, при помощи оператора HAVING оно отрабатывает как и положено.

Проблема с оператором 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)
Однако вариант с HAVING более правильный и более красивый.
__________________
Everything will be great in the end.
If it's not great, it's not the end.
Alexey вне форума   Ответить с цитированием
Старый 13.09.2011, 13:10   #9
Вредина
 
Аватар для Jooz
 
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 437
Jooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущееJooz - прекрасное будущее
По умолчанию

Alexey, спасибо!
__________________
Чтобы произошло чудо нужно обязательно дунуть. Если не дунуть - чуда не произойдет!
Jooz вне форума   Ответить с цитированием
Старый 13.09.2011, 15:02   #10
Мне повезёт!
 
Аватар для Alexey
 
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 281
Alexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущееAlexey - прекрасное будущее
По умолчанию

Пожалуйста
__________________
Everything will be great in the end.
If it's not great, it's not the end.
Alexey вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск страниц в сапе по урл или релевантный поиск 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.