php[tek] 2018 : Call for Speakers

password_verify

(PHP 5 >= 5.5.0, PHP 7)

password_verifyПроверяет, соответствует ли пароль хешу

Описание

boolean password_verify ( string $password , string $hash )

Проверяет, соответствует ли пароль хешу.

Обратите внимание, что password_hash() возвращает алгоритм, стоимость и соль как части хеша. Таким образом, вся необходимая для проверки информация включена в него. Это позволяет производить проверку без необходимости хранить все эти данные раздельно.

Эта функция безопасна для атак по времени.

Список параметров

password

Пользовательский пароль.

hash

Хэш, созданный функцией password_hash().

Возвращаемые значения

Возвращает TRUE или FALSE, в зависимости от результатов проверки.

Примеры

Пример #1 Пример использования password_verify()

<?php
// Смотрите пример использования password_hash(), для понимания откуда это взялось.
$hash '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (
password_verify('rasmuslerdorf'$hash)) {
    echo 
'Пароль правильный!';
} else {
    echo 
'Пароль неправильный.';
}
?>

Результат выполнения данного примера:

Пароль правильный!

Смотрите также

add a note add a note

User Contributed Notes 5 notes

up
175
Anonymous
3 years ago
If you get incorrect false responses from password_verify when manually including the hash variable (eg. for testing) and you know it should be correct, make sure you are enclosing the hash variable in single quotes (') and not double quotes (").

PHP parses anything that starts with a $ inside double quotes as a variable:

<?php
// this will result in 'Invalid Password' as the hash is parsed into 3 variables of
// $2y, $07 and $BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq
// due to it being enclosed inside double quotes
$hash = "$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq";

// this will result in 'Password is valid' as variables are not parsed inside single quotes
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (
password_verify('rasmuslerdorf', $hash)) {
    echo
'Password is valid!';
} else {
    echo
'Invalid password.';
}
?>
up
13
chris at weeone dot de
1 year ago
The function password_verify() uses constant time. This makes it safe against timing attacks. Don't use crypt($password_database) === crypt($password_given_by_login), since there is no protection against timing attacks!

If you don't want to use password_verify(), then have a look at hash_equals(), which also runs a timing attack safe string comparison.
up
29
Vasil Toshkov
4 years ago
This function can be used to verify hashes created with other functions like crypt(). For example:

<?php

$hash
= '$1$toHVx1uW$KIvW9yGZZSU/1YOidHeqJ/';

if (
password_verify('rasmuslerdorf', $hash)) {
    echo
'Password is valid!';
} else {
    echo
'Invalid password.';
}

// Output: Password is valid!

?>
up
1
suit at rebell dot at
4 years ago
As Vasil Toshkov stated, password_verify() can be used to verify a password created by crypt() or password_hash()

That is because passwords created by password_hash() also use the C crypt sheme

If you want to verify older plain MD5-Hashes you just need to prefix them with $1$

See https://en.wikipedia.org/wiki/Crypt_(C) for more information.
up
-3
gorgonz at web dot de
2 months ago
just the correct link to the wikipedia, seen in the note of "suit at rebell dot at":

https://en.wikipedia.org/wiki/Crypt_(C)
To Top