За последние 24 часа нас посетили 26455 программистов и 1545 роботов. Сейчас ищут 818 программистов ...

Сравнивание md5 хэшей

Тема в разделе "PHP для новичков", создана пользователем Rockman, 2 окт 2011.

  1. Rockman

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

    С нами с:
    18 ноя 2010
    Сообщения:
    53
    Симпатии:
    0
    Адрес:
    Россия
    Здравствуйте, совсем запутался из за чего может происходить следующее:
    Я делаю капчу для обработки формы. Используя библиотеку GD генерирую изображение в отдельном .php, тут же в глобальный массив _SESSION присваиваю хэш рандомно сгенерированного текста качи. Затем на нужно странице вывожу изображение капчи, разумеется сессия подключается и на этой странице, обрабатываю событие submit, беру введенное значение капчи из формы и используя функцию md5 сравниваю хэш введенного текста с хэшем, который хранится в _SESSION. Но результат огорчает, капча всегда верна. В случае когда сравниваешь истинные значение, а не хэши, то все работает прекрасно. Проверял много раз, все ли правильно написано, то ли я сравниваю, но результат один и тот же.
     
  2. Rockman

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

    С нами с:
    18 ноя 2010
    Сообщения:
    53
    Симпатии:
    0
    Адрес:
    Россия
    И подскажите, может и не использовать вовсе md5, но все равно интересно почему не сравниваются хэши.
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Потому что в коде, который не приведен в теме, однозначно и определенно есть ошибка.
     
  4. Rockman

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

    С нами с:
    18 ноя 2010
    Сообщения:
    53
    Симпатии:
    0
    Адрес:
    Россия
    Код создания капчи:

    Код (Text):
    1.  
    2. <?php
    3.    session_start();
    4.    header('Content-Type: image/png');
    5.    $im = imagecreatetruecolor(131, 57);
    6.    $bg = imagecolorallocate($im, 242,243,244);
    7.    $grey = imagecolorallocate($im, 48,43,47);
    8.    imagefill($im, 0, 0, $bg);
    9.    $text = rand(100,999);
    10.    $_SESSION['code'] = md5($text);
    11.    $font = 'MACARENA.TTF';
    12.    imagettftext($im, 42, 6, 24, 47, $grey, $font, $text);
    13.    imagepng($im);
    14.    imagedestroy($im);
    15. ?>
    Скрипт обработки:

    Код (Text):
    1. <?php
    2.               session_start();
    3.           if(isset($_POST['submit'])) {
    4.               $code = md5($_POST['code']);
    5.               if($code == $_SESSION['code']) {
    6.                 echo "Капча верна";
    7.              } else { echo "Капча неверна"; }
    8.           }
    9.        ?>
    10.        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    11.        <img src="captcha/captcha.php" />
    12.        <input type="text" name="code" class="input" />
    13.        <input type="submit" name="submit" value="save" class="button" />
    14.        </form>
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Расставь echo везде - посмотри, что в $code, что в $_POST['code'], что в $_SESSION['code'] .
    После сравнения
    PHP:
    1. <?php
    2. // ...
    3. if($code == $_SESSION['code']) {
    4.     // ...
    5. } else {
    6.     // ...
    7. }
    8. // ...
    9. ?>
    надо обязательно убирать из сессии параметр code ( unset($_SESSION['code']); )

    Не знаю, зачем они нужны в данном случае, но сравниваются они без проблем:
    PHP:
    1. <?php
    2. $str1 = md5('123');
    3. $str2 = md5('123');
    4. if($str1 == $str2)
    5.     echo('Равны');
    6. else
    7.     echo('Не равны');
    8. echo('<br />=======<br />');
    9. $str1 = md5('123');
    10. $str2 = md5('234');
    11. if($str1 == $str2)
    12.     echo('Равны');
    13. else
    14.     echo('Не равны');
    15. ?>
     
  6. Rockman

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

    С нами с:
    18 ноя 2010
    Сообщения:
    53
    Симпатии:
    0
    Адрес:
    Россия
    Хорошо, попробую.

    Вот и я о том, всегда сравнивались, а тут ...
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Rockman
    Ищи проблему в другом месте, этот код БЕЗ ИЗМЕНЕНИЙ полностью рабочий.