2013-05-27 3 views
1

Недавно у меня был разговор, который привел меня к открытию, что я неправильно хранил пароли. Я всегда использовал md5 и считал, что он достаточно безопасен. Однако после некоторого чтения я обнаружил, что это не так, поэтому я делаю переход на bcryptсовпадение паролей, но если утверждение не выполнено

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

Вот код:

$username = $_POST['username']; 
$password = $_POST['password']; 

/*find that username in the database and grab their info*/ 
$check_username = "SELECT * FROM users WHERE username = ?"; 
    $query_username = $conn->prepare($check_username); 
      $query_username->execute(array($username)); 
       $count = $query_username->rowCount(); 

    if($count > 0)/*if the user was found in the database*/ 
     {  
while($row = $query_username->fetch()) 
      { 
       $salt = $row['salt']; 
       $password_encrypted = $row['password']; 
       $encrypt_password = crypt($password, $salt); 

       if ($encrypt_password == $row['password']) 
        { 
         echo "success"; 
        } 
       else 
        { 
         var_dump($encrypt_password); 
         echo "<br />"; 
         var_dump($row['password']); 
        } 
      } 
} 

Не знаю, почему это, если заявление не удается, мы надеемся, один из вас может видеть то, что мне не хватает. Заранее спасибо.

из положить vardumps:

string(60) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee" 
string(61) "$2y$09$l2j89a6l7eoaz4dqpn5xzeAyBP1l7QzQuT7rIj8qYWX1/qJz7MYee" 

Нашел ошибку, я использую бинарный, как для столбца, изменяя строку 60 решить эту проблему. Спасибо за советы по использованию vardump

+0

Сделайте 'var_dump()' вместо 'echo'. –

+0

Вы сравниваете «зашифрованный» пароль с «нормальным», а ваша переменная '$ password' не определена. –

+0

@NOX $ пароль пользователя поставляется, над кодом я вставили, и $ строки [ «пароль»] уже зашифрован из подключений формы – Owen

ответ

2

Не используйте echo или, по крайней мере, не используйте его без жестких границ. В противном случае у вас есть та же ситуация, следующие две строки, которые, кажется, производят один и тот же вывод:

print "hello" 
print "hello  " 

Используйте var_dump или, если вы необходимо эхо, эхо переменных таким образом, что HTML визуализатор Безразлично» t наполнит ваш результат, например, используя теги <pre> с [ и ] разделителями.

+0

hey bud, ive только эхо эти переменные, чтобы увидеть, что они хранят, как только он будет работать, он будет удален – Owen

+0

@Owen, это не вопрос ... вы бы удалили инструкции 'var_dump' слишком. Дело в том, что 'var_dump' специально разработан для целей отладки и видит, какие переменные содержат, и намного лучше, чем' echo' для этой цели. –

+0

@Owen, это нормально, вы должны _still_ не использовать 'echo', так как он может быть изменен в фоновом режиме. Например, рассмотрим строку '"


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