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

Форум PHP

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

 

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

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

тема: шифрование данных
 
 автор: kasmanaft   (09.02.2006 в 17:10)   письмо автору
 
 

вообщем мне нужно записать в куки зашифрованное имя пользователя.
пользователь вводит в форму имя и пароль, происходит проверка корректности ввода и если все верно, нужно в куки записать зашифрованное имя...
нужно использовать симметричное шифрование, я выбрал mcrypt
вот функция шифровки:
 function crypt_data ($data)
{
        $crypt_key = "ключик";
        $crypt_data = mcrypt_ecb (MCRYPT_3DES, $crypt_key, $data, MCRYPT_ENCRYPT);
        return $crypt_data;

При помощи етой функции имя шифруется и результат должен заноситься в куки...
 setcookie('username',$crypt_name,time()+60*60*3); 


Но при выполнении скрипта происхоидит ошибка:
Cannot modify header information - headers already sent by (output started at ~~~\config.php:55) in ~~~\login.php on line 32

сама функция шифровки находится в файле конфиг.пхп, а шифровка в файле логин.пхп... 55 строка файла конфиг - строка где шифруются данные, а в 32 строке логин.пхп происходит запись в куки.... файл конфиг приинклюжен к файлу логин.пхп...

что можно сделать? что-то не могу ничего путного придумать...

   
 
 автор: Axxil   (09.02.2006 в 17:23)   письмо автору
 
   для: kasmanaft   (09.02.2006 в 17:10)
 

Эта ошибка показыает что в 55 строке файла config происходи вывод в браузер.
А что там до 55 строки происходило?

   
 
 автор: kasmanaft   (09.02.2006 в 17:45)   письмо автору
 
   для: Axxil   (09.02.2006 в 17:23)
 

до 55 строки были объявлены переменные для достура к базе данных (имя пароль и тд.) ... если достуа к базе нет - выводит извинения... в общем в браузер само по себе (без опр. условий, т.е. нерабочей базы данных) там ничего не выводится...

причем если не использовать функцию шифровки, то все работает. Все заносится в куки прекрасно... а вот с шифрованием проблемы :(

добавлю, что имя и пароль пользователь вводит в один файл (login_form.php), содержищий саму форму, который посылает данные другому файлу (login.php)... так было удобней... но думаю это не существенно...

   
 
 автор: Loki   (09.02.2006 в 18:04)   письмо автору
 
   для: kasmanaft   (09.02.2006 в 17:45)
 

существенно: куки должны быть отправлены броузеру до начала вывода каких либо данных.

   
 
 автор: kasmanaft   (09.02.2006 в 18:27)   письмо автору
 
   для: Loki   (09.02.2006 в 18:04)
 

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

когда я эту функцию не использую - все работает, стоит подправить одну строку - все, приехали :)
вот как все происходит:
когда $name = $_POST['name']; - все работает...
а когда $name = crypt_data ($_POST['name']); - то уже не работает :((

я вот думаю, что дело в "mcrypt_ebc" ... может быть она что-нибудь эдакое скрытое выводит?

   
 
 автор: Новичек   (09.02.2006 в 19:00)
 
   для: kasmanaft   (09.02.2006 в 18:27)
 

вы пишите

>вот функция шифровки:

function crypt_data ($data) 

        $crypt_key = "ключик"; 
        $crypt_data = mcrypt_ecb (MCRYPT_3DES, $crypt_key, $data, MCRYPT_ENCRYPT); 
        return $crypt_data; 
}  

>При помощи етой функции имя шифруется и результат должен заноситься в куки...

setcookie('username',$crypt_name,time()+60*60*3);  

но вот что не ясно, откуда у вас берется $crypt_name ?
вроде судя по вашем кодам она нигде не определяется.

я вообщето шифрую так

$info = base64_encode("$username:$mail:$pass");
            setcookie("users","$info",time()+2592000);


расшифровка

$users = $_COOKIE['users'];
$users = base64_decode($users);

   
 
 автор: kasmanaft   (09.02.2006 в 19:24)   письмо автору
 
   для: Новичек   (09.02.2006 в 19:00)
 

кодировать base64, не думаю что это лучшее решение... base64_decode и всей защите привет :)
никак не могу сообразить в чем проблема...

$crypt_name = crypt_data($name); (где $name это имя пользователя, прошедшее через регулярное выражение (очистка от всяких пакостей))

регулярное выражение тоже работает. без шифровки все работает... :(

   
 
 автор: kasmanaft   (10.02.2006 в 13:47)   письмо автору
 
   для: kasmanaft   (09.02.2006 в 17:10)
 

что-то все молчат...
я понял, что ошибка происходит из-зи строки

$crypt_name = mcrypt_ecb (MCRYPT_3DES, $crypt_key, $name, MCRYPT_ENCRYPT);

видать функция mcrypt_ecb шлет какие-то хеадеры... вопрос не в том, где у меня в этой строке ошибка (там вроде бы все правильно), а в том, как бы тогда зашифровать это имя пользователя и запихать его в куки?

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

   
 
 автор: cheops   (10.02.2006 в 15:34)   письмо автору
 
   для: kasmanaft   (10.02.2006 в 13:47)
 

Нет она ничего не отсылает, скорее всего просто выводит предупреждения. Попробуйте следующий вариант
<?php
  $crypt_name 
= @mcrypt_ecb (MCRYPT_3DES$crypt_key$nameMCRYPT_ENCRYPT);
?>

   
 
 автор: kasmanaft   (10.02.2006 в 16:55)   письмо автору
 
   для: cheops   (10.02.2006 в 15:34)
 

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

провел такой тест:

<?php
$data 
"lexa";
$crypt_key "jklSDJA45SdasdAJ";
$crypt_name = @mcrypt_ecb (MCRYPT_3DES$crypt_key$dataMCRYPT_ENCRYPT);
echo 
"$crypt_name <br>";
setcookie('username',$crypt_name,time()+60*60*3);
echo 
$_COOKIE['username'];
?>


оказалось, что даже такой простенький скрипт не хочет работать... что же делать?
проверте, пожалуйста, у себя, может быть заработает? может у меня что-то с настройками не так...

   
 
 автор: cheops   (10.02.2006 в 23:22)   письмо автору
 
   для: kasmanaft   (10.02.2006 в 16:55)
 

Этот скрипт не работает, потому что перед функцией setcookie() конструкцией echo выводится информация в окно браузера - так нельзя, до вызова setcookie() в поток ничего отправляться не должно.

   
 
 автор: kasmanaft   (11.02.2006 в 12:48)   письмо автору
 
   для: kasmanaft   (09.02.2006 в 17:10)
 

всем кто мне помогал - огромное спасибо :)
Дело решилось. Оказывается, когда я вызывал функцию mcrypt_ecb, php или апач (не знаю точно :) советовал мне этого не делать :) тем самым происходил вывод в браузер :) можно сказать что сама функция mcrypt_ecb выводила в браузер...
отключил error_reporting и все заработало :)

правда, для меня остается загадкой почему не работало @mcrypt_ecb
но все равно дело сделано - я доволен :))

   
Rambler's Top100
вверх

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