password_verify()
toma dos argumentos: una cadena de la que desea verificar si es la contraseña correcta y el valor que calculó anteriormente con password_hash()
, que presumiblemente almacenó en algún lugar de la base de datos.
Una aplicación típica podría ser:
<?php
$hash = password_hash('my-secret', PASSWORD_DEFAULT);
// normally you would save the hash somewhere, but we'll just continue in this example
$check_a = 'other-secret';
$check_b = 'my-secret';
if (password_verify($check_a, $hash))
echo 'Check A was the original password: ' . $check_a;
if (password_verify($check_b, $hash))
echo 'Check B was the original password: ' . $check_b;
La salida será:
Check B was the original password: my-secret
Si desea obtener la contraseña original a partir de un hash calculado por password_hash()
, deberá probar todas las posibilidades; eso es lo que muestra este ejemplo. Debido a la arquitectura de password_hash()
, encontrar una contraseña como ésta llevará mucho tiempo, por lo que no vale la pena.
También tenga en cuenta, en password_hash()
doc :
PASSWORD_DEFAULT
: use el algoritmo bcrypt (predeterminado a partir de PHP 5.5.0). Tenga en cuenta que esta constante está diseñada para cambiar con el tiempo a medida que se agregan algoritmos nuevos y más sólidos a PHP. Por esa razón, la longitud del resultado de usar este identificador puede cambiar con el tiempo. Por lo tanto, se recomienda almacenar el resultado en una columna de la base de datos que pueda expandirse más allá de 60 caracteres (255 caracteres sería una buena opción).
El algoritmo está diseñado para cambiar con el tiempo, de modo que se mantenga seguro, y encontrar una contraseña por fuerza bruta no será posible con computadoras más rápidas (suponiendo que la instalación de PHP en su servidor esté actualizada)
En cualquier caso, un hash es unidireccional: no puedes darle la vuelta. Solo puedes verificar una contraseña determinada calculando el hash de que uno y comprobando si es el mismo.