2014-11-03 4 views
6

Я использую мои вставленные пароли через password_hash. Я проверяю их с помощью password_verify.password_verify не проверяет hash

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

мои страницы следующим образом,

main_login.php (форма):

<?php include 'header.php';?> 
<body> 
<form role="form" method="post" action="login.php"> 
    <div class="form-group"> 
    <label for="usrname">Username:</label> 
    <input type="text" class="form-control" name="usrname" placeholder="Enter username"> 
    </div> 
    <div class="form-group"> 
    <label for="passwrd">Password:</label> 
    </div> 
    <input type="password" class="form-control" name="passwrd" placeholder="Enter password"> 
    <br> 
    <input type="checkbox">Remember Me 
    <br> 
    <br> 
    <button type="submit" class="btn btn-default">Submit</button> 
</form> 
</body> 
</html> 

login.php (обработчик):

<?php 
include 'vars.php'; 
include 'header.php'; 
$sql="SELECT * FROM members WHERE usrname='$usrname'"; 
$result=mysqli_query($con,$sql); 
$count=mysqli_num_rows($result); 
$row=mysqli_fetch_row($result); 
$verify=password_verify($hash,$row[2]); 
if($verify){ 
    $_SESSION["usrname"]=$usrname; 
    echo "Correct"; 
} 
else { 
    echo "user: " . $usrname. "<br>"; 
    echo "pass: " . $hash. "<br>"; 
    echo "db: " . $row[2]."<br>"; 
    echo "Wrong Username or Password"; 
} 
?> 

vars.php:

<?php 
$h='localhost';$u='caelin';$p='****';$d='ombouwnh'; 
$con=mysqli_connect($h,$u,$p,$d); 
$usrname=$_POST['usrname']; 
$passwrd=$_POST['passwrd']; 
$hash=password_hash($passwrd, PASSWORD_DEFAULT); 
?> 

, когда я пытаюсь войти в систему, используя username 'caca' и password 'caca' Я получаю другой вывод для обоих, каждый раз, когда я повторяю. Я не могу найти эту проблему в stackoverflow.

TIA

PS. Если вам нужна дополнительная информация, задайте им вопрос

+4

Убедитесь, что длина колонок достаточно длинная, чтобы разместить хэш; обычно это ошибка, которую многие делают. –

+1

это varchar (255) @ Fred-ii- – caelin

+0

'$ row [2]' убедитесь, что номер правильный. Это действительно третий столбец в вашей таблице, правильно? Кроме того, у вас есть 'session_start();' загружен, правильно? '$ _SESSION [" usrname "]' может быть неактуальным. –

ответ

11

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

$verify=password_verify($_POST['passwrd'],$row[2]); 

if($verify){ 
    $_SESSION["usrname"]=$usrname; 
    echo "Correct"; 
} 
else { 
    echo "user: " . $usrname. "<br>"; 
    echo "pass: " . $hash. "<br>"; 
    echo "db: " . $row[2]."<br>"; 
    echo "Wrong Username or Password"; 
} 
+2

Путь идти Андрей. Я рад, что OP получил решение. Я спросил OP, хочет ли он, чтобы я опубликовал то, что я использую сам, прежде чем увидел ваш комментарий. Всегда лучше работать с кодом OP и находить решение реальной проблемы вместо чужого кода. * Приветствия * +1 –

3

Вы подогреты пароль - просто передать открытым текстом пароль и хэш (из БД) для password_verify и она работает.

+0

Получено ответ за 20 минут до этого и принято; Спасибо. –

+0

Извините, открыли вопрос и набрал ответ, но не смог опубликовать его до тех пор, пока мое соединение wifi не будет исправлено (для – Djordje

Смежные вопросы