Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: приколы с mcrypt()
 
 автор: localGhost   (21.06.2005 в 12:08)   письмо автору
 
 

Объяснмте пожалуйста в чем прикол. Вобщем надо зашифровать с помощью функции mcrypt_encrypt() строку и положить ее в БД mySQL. все бы ничего,но некоторые отдельные слова шифроваться шифруються но в базу не кладуться.просто не срабатывает функция mysql_query!! Например такие как admin, password или 100(!) 10 нормально, 1000 нормально а 100!!!!! ну это уже никак понять не могу!

шифрую значит так:


<?
$iv 
mcrypt_create_iv (mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256MCRYPT_MODE_ECB), MCRYPT_RAND);
$return mcrypt_encrypt (MCRYPT_RIJNDAEL_256$ckey$strMCRYPT_MODE_ECB$iv);
// $ckey -ключ к шифрованию
// $str - непосредственно сама строка.
// и потом в БД через mysql_query ("INSERT INTO ........  VALUES ......... ")
?>


может mycrypt символы недопустимые создает, из-за которых функции mySQL глохнут? Главное что последующий код выполняеться без проблем, а функций БД будто и нет. ни ошибок ни черта!

как это так??

   
 
 автор: P@Sol   (21.06.2005 в 12:20)   письмо автору
 
   для: localGhost   (21.06.2005 в 12:08)
 

напиши
echo $return;
и проследи что выдаеться тебе при шифровании разных слов

   
 
 автор: cheops   (21.06.2005 в 12:23)   письмо автору
 
   для: localGhost   (21.06.2005 в 12:08)
 

А вы переде занесением их в базу данных пропускаете через функцию mysql_escape_string()?
<?php
  $return 
mysql_escape_string($return);
?>

Кроме того, вы можете шифровать данные при помощи встренных функций MySQL, получится даже быстрее
AES_ENCRYPT(str,key_str) 
AES_DECRYPT(crypt_str,key_str)

   
 
 автор: localGhost   (21.06.2005 в 15:26)   письмо автору
 
   для: cheops   (21.06.2005 в 12:23)
 

а как запрос построить для дешифрования и чтения данных. Зашифровать получилось а обратно все голову ломаю над SQL запросом. помогите пожалуйста.

и еще: ключ я записал следующим образом:


<?
mysql_query 
("SELECT @key:='$acckey'")

mysql_query ("INSERT INTO 'table' ('cell') VALUES (AES_ENCRYPT('string', @key))");
?>

значение @key будет же видно до mysql_close(); т.е. до завершения обработки страницы. верно?

   
 
 автор: cheops   (21.06.2005 в 18:34)   письмо автору
 
   для: localGhost   (21.06.2005 в 15:26)
 

>значение @key будет же видно до mysql_close(); т.е. до
>завершения обработки страницы. верно?
да

   
 
 автор: P@Sol   (21.06.2005 в 15:31)   письмо автору
 
   для: cheops   (21.06.2005 в 12:23)
 

AES_ENCRYPT(str,key_str)  - шифрование
AES_DECRYPT(crypt_str,key_str) - дешифрование

   
 
 автор: localGhost   (21.06.2005 в 15:38)   письмо автору
 
   для: P@Sol   (21.06.2005 в 15:31)
 

да нет, это понятно все..... как правильно SELECT запрос составить на дешифрование?
я сделал так, но не работает, наверно неправильно:ъ

<?
$result 
"SELECT AES_DECRYPT('user', @key), AES_DECRYPT('pass', @key), AES_DECRYPT('level', @key) FROM table WHERE id = 'str'";
mysql_fetch_array (mysql_query ($result));
?>


получил вот это:


Array
(
    [0] => 
    [AES_DECRYPT(user', @key)] => 
    [1] => 
    [AES_DECRYPT('pass', @key)] => 
    [2] => 
    [AES_DECRYPT('level', @key)] => 
)


как видите везде пусто

   
 
 автор: P@Sol   (21.06.2005 в 15:52)   письмо автору
 
   для: localGhost   (21.06.2005 в 15:38)
 

http://dev.mysql.com/doc/mysql/en/encryption-functions.html - eng
http://www.kstu.kz/~tolik/info/MySQL/Miscellaneous_functions.html - рус
- единственое чем я могу помочь:)

   
 
 автор: localGhost   (21.06.2005 в 17:07)   письмо автору
 
   для: P@Sol   (21.06.2005 в 15:52)
 

блин, это я уже проштудировал.... там естт пример шифрования, но нету дешифрования.. вопрос остается открытым.

   
 
 автор: cheops   (21.06.2005 в 18:36)   письмо автору
 
   для: localGhost   (21.06.2005 в 15:38)
 

А у вас переменная @key жива? запрос
SELECT @key

что даёт? попробуйте пока просто подставить значение из переменной $acckey
<? 
$result 
"SELECT AES_DECRYPT('user', '$acckey'), AES_DECRYPT('pass', '$acckey'), AES_DECRYPT('level', '$acckey') FROM table WHERE id = 'str'"
mysql_fetch_array (mysql_query ($result)); 
?>

   
 
 автор: localGhost   (22.06.2005 в 04:32)   письмо автору
 
   для: cheops   (21.06.2005 в 18:36)
 

кстати, а какой должен тип у ячейки? пока у меня стоит TEXT. Или это не имеет значения?

   
 
 автор: P@Sol   (22.06.2005 в 08:58)   письмо автору
 
   для: localGhost   (22.06.2005 в 04:32)
 

а говоришь проштудировал:)

If you want to store results from an encryption function that might contain arbitrary byte values, use a BLOB column rather than a CHAR or VARCHAR column to avoid potential problems with trailing space removal that would change data values.
(c) MySQL

   
 
 автор: localGhost   (22.06.2005 в 09:00)   письмо автору
 
   для: P@Sol   (22.06.2005 в 08:58)
 

хммм.. понятно.. может в этом и проблема..

   
 
 автор: cheops   (22.06.2005 в 10:05)   письмо автору
 
   для: localGhost   (22.06.2005 в 04:32)
 

В принципе можно TEXT, но лучше если это действительно будет BLOB, чтобы не побить зашифрованные данные кодировкой.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования