Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Строка из mcrypt_encrypt, запись в бд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Tox
Отправлено: 12 Августа, 2012 - 13:36:02
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Проблема в том, что строка в бд не пишется:
PHP:
скопировать код в буфер обмена
  1. $t = mcrypt_ecb ( MCRYPT_3DES , $key , $token , MCRYPT_ENCRYPT );
  2. mysql_query("Update user SET `t`='".$t."' where `id`=1;");
  3. echo mysql_errno() . ": " . mysql_error() . "\n";// - сообщения об ошибках

Все время ошибки вроде:
1064: 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 '?Z'?' at line 1
Поскольку функция возвращает строку, тип поля VARCHAR(255). Может '".$t."' надо еще как-то преобразовать?

Почему 3DES? Бессмертный ЯД рекомендует.


-----
In Console We Trust. Code hard. Or die.
 
 Top
Hawkmoth
Отправлено: 12 Августа, 2012 - 13:46:45
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




Не работал с этой функцией, но
php.net пишет:
This function is deprecated and should not be used anymore, see mcrypt_generic() and mdecrypt_generic() for replacements.

А судя по ошибке, в сгенеренной строке проскакивает одинарная кавычка, которую бы надо экранировать.
 
 Top
Tox
Отправлено: 12 Августа, 2012 - 14:14:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




А как ее заэкранировать? Поиск по строке, замена ' на \' ?
PHP:
скопировать код в буфер обмена
  1. /* Открывает модуль и создаёт IV */
  2. $td = mcrypt_module_open ('des', '', 'ecb', '');
  3. // кей объявлен, в нем строка, 5 символов
  4. $key = substr ($key, 0, mcrypt_enc_get_key_size ($td));
  5. $iv_size = mcrypt_enc_get_iv_size ($td);
  6. $iv = mcrypt_create_iv ($iv_size, MCRYPT_RAND);
  7.  
  8. /* Инициализирует дескриптор шифрования */
  9. if (mcrypt_generic_init ($td, $key, $iv) != -1) {
  10.  
  11. /* Шифрует данные */
  12. $c_t = mcrypt_generic ($td, $token);
  13.  
  14.  
  15. }
  16.  
  17.  
  18.  
  19.     mysql_query("Update user SET `t`='".$c_t."' where id=1;");
  20. echo mysql_errno() . ": " . mysql_error() . "\n";// - сообщения об ошибках



1064: 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 'xS??E?X?L????????`,???z?%?????G^-e??Hfꥂ].ؘ^????P?y??????[????k7? ??q?y' at line 1


-----
In Console We Trust. Code hard. Or die.
 
 Top
Мелкий Супермодератор
Отправлено: 12 Августа, 2012 - 14:20:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Tox пишет:
to use near '?Z'?

Судя по этому, функция возвращает бинарные данные. Экранирование где?
И тип поля в этом случае лучше BINARY или VARBINARY


-----
PostgreSQL DBA
 
 Top
Tox
Отправлено: 12 Августа, 2012 - 14:23:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Мелкий пишет:
Tox пишет:
to use near '?Z'?

Судя по этому, функция возвращает бинарные данные. Экранирование где?
И тип поля в этом случае лучше BINARY или VARBINARY

Я тоже так думал, но функция-то строку возвращает. BINARY не работал, писал "d2".
Для записи $c_t

использовать VARBINARY?


-----
In Console We Trust. Code hard. Or die.
 
 Top
Hawkmoth
Отправлено: 12 Августа, 2012 - 14:26:28
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




Для начала mysql_real_escape_string($c_t) перед вставкой в базу
 
 Top
Tox
Отправлено: 12 Августа, 2012 - 14:39:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Спасибо, с VARBINARY и mysql_real_escape_string все работает.
(Добавление)
При дешифрировании опять "символы" стали появляться, после выборки из бд снова стал экранировать, но проблема не исчезла. Кстати, перед записью в бд экранирование не всегда работает.
PHP:
скопировать код в буфер обмена
  1. $td = mcrypt_module_open ('des', '', 'ecb', '');
  2. $key = substr ($key, 0, mcrypt_enc_get_key_size ($td));
  3. $iv_size = mcrypt_enc_get_iv_size ($td);
  4. $iv = mcrypt_create_iv ($iv_size, MCRYPT_RAND);
  5. /* Инициализирует дескриптор шифрования */
  6. if (mcrypt_generic_init ($td, $key, $iv) != -1) {
  7. /* Реинициализирует буферы для дешифрования */
  8. mcrypt_generic_init ($td, $key, $iv);
  9. $token = mdecrypt_generic ($td, $row['T']);
  10. /* Зачистка */
  11. }
  12.  

Просто Яд настаивает на том, чтобы шифровать токены юзеров,причем в 3DES, кто-нибудь вообще токены шифровал?) Что самое интересное, ключи и "секреты" в коде шифровать не надо, там же и ключевое слово, а токены шифровать обязательно.
Я уже начал подумывать о написании своего алгоритма.
(Добавление)
Забавно, но чтобы шифровать токены, нужна лицензия:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  Российской Федерации коммерческая деятельность, связанная с использованием криптографических средств, подлежит обязательному лицензированию. С 22 января 2008 года действует Постановление Правительства РФ от 29 декабря 2007 N 957 «Об утверждении положений о лицензировании отдельных видов деятельности, связанных с шифровальными (криптографическими) средствами», которым приняты Положения о лицензировании деятельности по:
  2. распространению шифровальных (криптографических) средств
  3. техническому обслуживанию шифровальных (криптографических) средств
  4. предоставлению услуг в области шифрования информации
  5. разработке, производству шифровальных (криптографических) средств, защищенных с использованием шифровальных (криптографических) средств информационных и телекоммуникационных систем

Это из вики.
Сюда попадает шифрование данных юзера?


-----
In Console We Trust. Code hard. Or die.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB