За последние 24 часа нас посетили 131904 программиста и 2410 роботов. Сейчас ищут 1286 программистов ...

AES_DECRYPT всегда возвращает NULL

Тема в разделе "MySQL", создана пользователем Dmitriy A. Arteshuk, 29 фев 2012.

  1. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    заносим данные в БД

    Код (Text):
    1. UPDATE `sf_comments` SET `author` = AES_ENCRYPT('1asdfres8ded', '12345') WHERE `id`=2
    достаем

    Код (Text):
    1. SELECT AES_DECRYPT(`author`, '12345') FROM `sf_comments` WHERE `id` = 2
    всегда возвращает NULL :( второй час бъюсь, толку ноль

    заранее благодарен!
     
  2. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    У тебя там походу varchar?
     
  3. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    пробовал и blob и tynitext - результат тот же....

    пока решил использовать ENCODE и DECODE, работает, но все же интересно почему AES_DECRYPT не пашет....
     
  4. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    С blob у меня все отлично
    Вариант конечно не лучший, но если не критично то тоже вариант =)

    собственно почему:
    Код (Text):
    1. SELECT BENCHMARK( 1000000, AES_ENCRYPT( "password", "password" ) )
    2. Showing rows 0 - 0 (1 total, Query took 0.2862 sec)
    3.  
    4. SELECT BENCHMARK( 1000000, ENCODE( "password", "password" ) )
    5. Showing rows 0 - 0 (1 total, Query took 0.5336 sec)
     
  5. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    у меня и с blob и с varbinary все отлично. ты точно шифруешь и дешифруешь по одному и тому же ключу?
     
  6. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    в первом посте я привел код, там везде 12345, может с синтаксисом чего, но я все вроде перепробовал, кавычки, двойные одинарные, без кавычек... бестолку (
     
  7. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    не, это понятно, просто мысль была, что на 12345 ты заменил то, что у тебя в коде
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    не, я привел запросы, которые прям в phpmyadmin выполнял.....

    Добавлено спустя 14 минут 4 секунды:
    господа, а приведите тут свои запросы с AES_ENCRYPT и AES_DECRYPT, пожалуйста
     
  9. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    История SQL-запросов:
    yyy : varbinary(256)
    val : varchar(255)
    ttt : blob
    всё то же самое
     
  10. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    В базе данных можно хранить особо важный данные и в закрытом зашифрованном виде. Например, при помощи функций DES_ENCRYPT и DES_DESCRYPT. В этом случае данные шифруются при помощи алгоритма Triple-DES. Правда, для работы с этими функциями MySQL должен быть собранным с поддержкой SSL

    может тут беда? как проверить?
     
  11. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Элементарный
    Код (Text):
    1. SELECT AES_DECRYPT(AES_ENCRYPT('123','123'),'123')
    пробовали ?
     
  12. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    на закладке "состояние" в муадмине есть раздел про ssl

    а, кстати, попробуй выполнить код из пхп, без админа,
    у меня на стартовой предупреждение
     
  13. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    пробовал, выведет 123

    везде стоит 0 (ноль) а строка Ssl_session_cache_mode NONE
     
  14. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    у меня тоже, но этот раздел есть. думаю, если бы сборка была без поддержки - его бы небыло
     
  15. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    так где ж я лох то? (((
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Мне кажется, это какие-то настройки.
    Я работал с AES-шифрованием на рабочем сервере (ну там законы все эти о хранении пользовательских данных в тайне). В зашифрованном виде хранили номера телефонов, почты, имена-фамилии. Но сейчас вот пробую у себя на локалхосте и не понимаю, в чём проблема, однако не пашет. Вот прямо беру код из готового рабочего проекта, создаю нужные таблицы - и не пашет, хотя на боевом сервере работало...
     
  17. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    короче денвер фтопку получается???

    офф земляк, ты где в Дмитровском районе обитаешь? я там вырос, мать там живет, и дача в 15 км от икши...
     
  18. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    г.Дмитров, ул. Ольховая, уч. 21. :)
    Короче, это район "старый фрезерный", там сейчас частные дома. У меня тут участок, 20 соток примерно. Дом всё никак не дострою. Денег нада побольше получать :) А так участок хорош - все коммунальные услуги - свет, вода, газ, канализация... Как в квартире, только свой дом. Но блин, пока в строительном вагончике обитаю. Дом вот стоит рядом, но пока не живой, холодный... На крыше просто рубероид лежит от дождя.
     
  19. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    построишься....дело времени )))
     
  20. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Как говорил Сидорович из сталкера "а по твоей теме нарыл кое-что"... Если использовать не TEXT, а BLOB - то у меня чудесным образом всё заработало. Вот скрипт:

    Код (PHP):
    1. <?php
    2. /*
    3.     aes.php
    4.     Тестирование работоспособности MySQL-функций AES_ENCRYPT() и AES_DECRYPT()
    5. */
    6. // Параметры соединения с б.д.
    7. $dbhost = 'localhost';
    8. $dbuser = 'root';
    9. $dbpass = '123';
    10. $dbname = 'test';
    11. // Соединение
    12. $db = mysql_connect($dbhost, $dbuser, $dbpass) or exit('MySQL connect error');
    13. mysql_select_db($dbname, $db) or exit('MySQL select db error');
    14. mysql_query('SET NAMES utf8', $db) or exit('MySQL set names query error');
    15. // Пытаемся вставить запись
    16. $code = '12345';
    17. $sql = "INSERT INTO `posts` (`post_date`, `post_reads`, `post_text`) VALUES (NOW(), 123, AES_ENCRYPT('Some text', '{$code}'))";
    18. mysql_query($sql, $db) or exit('MySQL error:<br />' . $sql . '<br />' . mysql_error($db));
    19. $sql = "SELECT `post_id`, `post_date`, `post_reads`, AES_DECRYPT(`post_text`, '{$code}') AS `post_text` FROM `posts` ORDER BY `post_id` ASC";
    20. $res = mysql_query($sql, $db) or exit('MySQL error:<br />' . $sql . '<br />' . mysql_error($db));
    21. if(mysql_num_rows($res) > 0) {
    22.     while($row = mysql_fetch_assoc($res))
    23.         echo($row['post_id'] . ' | ' . $row['post_date'] . ' | ' . $row['post_reads'] . ' | ' . $row['post_text'] . '<br />');
    24. }
    25. ?>
    Вот создание таблицы:
    Код (Text):
    1. CREATE TABLE `posts` (
    2.     `post_id` int(11) NOT NULL AUTO_INCREMENT,
    3.     `post_date` date DEFAULT NULL,
    4.     `post_reads` int(11) NOT NULL DEFAULT '0',
    5.     `post_text` blob,
    6.     PRIMARY KEY (`post_id`)
    7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
  21. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    в мане вот такая инфа
    mysql> SHOW VARIABLES LIKE 'have_ssl';
    +---------------------+-------+
    | Variable_name | Value |
    +---------------------+-------+
    | have_ssl | YES |
    +---------------+-------+

    If the value is YES, the server supports SSL connections. If the value is DISABLED, the server supports SSL connections but was not started with the appropriate --ssl-xxx options (described later in this section). If the value is YES, the server supports SSL connections.


    у меня DISABLED, и все работает
     
  22. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    have_ssl DISABLED аналогично....

    sobachnik выполнил код выше, получил:

    1 | 2012-03-01 | 123 | Some text

    стало быть работает...но вся разница только

    AES_ENCRYPT('Some text', '{$code}')

    в скобках.....или нет?
     
  23. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    На сколько я понял, там дело в типе столбца. Нужен BLOB.
     
  24. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Новые чудеса.... ENCODE и DECODE

    на денвере все работает, перенесли на сервер, нихрена в базе не пишет...

    запрос:

    Код (Text):
    1. INSERT INTO `table` (text)
    2.  VALUES
    3.  (
    4. ENCODE('aaaaa', 3),
    5. )
    получаем:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '3)

    такой же запрос на денвере - все нормально, все записывает в БД....
     
  25. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Код (Text):
    1.  
    2. INSERT INTO `table` (text)
    3.  VALUES
    4.  (
    5. ENCODE('aaaaa', 3), <----- запятая =)
    6. )
    И да, если мне не изменяет память, то второй параметр стрингом должен быть.