SunshinePHP Developer Conference 2015

password_verify

(PHP 5 >= 5.5.0)

password_verifyComprueba que la contraseña coincida con un hash

Descripción

boolean password_verify ( string $password , string $hash )

Comprueba que el hash proporcionado coincida con la contraseña facilitada.

Observe que password_hash() devuelve el algoritmo, el coste y la sal como parte del hash devuelto. Por lo tanto, toda la información que es necesaria para verificar el hash está incluida Esto permite a la función de verificación comprobar el hash sin la necesidad de almacenar por separado la información de la sal o del algoritmo.

Parámetros

password

La contraseña del usuario.

hash

Un hash creado por password_hash().

Valores devueltos

Devuelve TRUE si la contraseña y el hash coinciden, o FALSE de lo contrario.

Ejemplos

Ejemplo #1 Ejemplo de password_verify()

<?php
// Ver el ejemplo de password_hash() para ver de dónde viene este hash.
$hash '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (
password_verify('rasmuslerdorf'$hash)) {
    echo 
'¡La contraseña es válida!';
} else {
    echo 
'La contraseña no es válida.';
}
?>

El resultado del ejemplo sería:

¡La contraseña es válida!

Ver también

add a note add a note

User Contributed Notes 3 notes

up
19
Vasil Toshkov
1 year 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
7
Anonymous
4 months 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
3
suit at rebell dot at
1 year 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.
To Top