2013-08-05 6 views
1

Привет, я пытаюсь использовать мои пароли с паролем password_hash() в PHP. Эта часть прекрасно, но для сравнения хэш возвращает ложь, несмотря ни на что. Для того, чтобы войти проверить базу данных учетных записей пользователей и захватить хэш пароля затем сравнить его с паролем, набранного в Мой код выглядит следующим образом:.PHP password_verify всегда возвращает false

$password = $_SERVER["PHP_AUTH_PW"]; 
$hash = $row["password"]; 
if (password_verify($password, $hash)) { 
    // CREATE SESSION VARIABLES // 
} 
else{ 
    header("HTTP/1.1 404 Not Found"); 
} 

Как вы можете видеть пароль, набранный привезены в HTTP-заголовок. Я не думал, что это испортит строку пароля, поскольку я могу сравнить это непосредственно с паролем в базе данных (без хеширования). Есть идеи? Я трижды проверил мою версию PHP, и я могу хэш-пароль, так что это не так.

+0

Вы проверили, что аргументы, которые вы даете 'password_verify', являются тем, что вы ожидаете от них? – Flosculus

+0

ну пароль в базе данных был хэширован с помощью функции password_hash(). Затем это идентифицируется и захватывается введенным именем пользователя и вводится идентификатор компании. Затем введенный пароль сравнивается с хешированным паролем с помощью функции password_verify(). однако он всегда возвращает false – Aaron

+0

Нет. Я имею в виду, что вы проверили вручную и удостоверились, что значения '$ password' и' $ hash' являются правильными значениями, полученными, независимо от того, проверяются они или нет. – Flosculus

ответ

2

Так что ничего плохого в функции password_verify() нет. В функции password_hash() был добавлен бит строки. Я скопировать и вставить эту функцию из официальной документации:.

echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n"; 

«\ п» бит в конце был не учитывается в функции проверки. Это было только здесь из-за того, что справлялся и вставлял, поэтому, как только я удалил его, все было в порядке. Надеюсь, это поможет другим в будущем.

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