password_needs_rehash

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

password_needs_rehashVerifica que el hash proporcionado cumple con el algoritmo y las opciones especificadas

Descripción

password_needs_rehash(string $hash, string|int|null $algo, array $options = []): bool

Esta función verifica que el hash proporcionado corresponde al algoritmo y a las opciones especificadas. Si no es así, el hash debería ser re-generado.

Parámetros

hash

Un hash creado por password_hash().

algo

A constante del algoritmo de contraseñas indicando qué algoritmo utilizar para crear el hash de la contraseña.

options

Un array asociativo de opciones. Véanse las constantes de algoritmos de contraseñas para la documentación sobre las opociones admitidas de cada algoritmo.

Valores devueltos

Devuelve true si el hash debe ser re-generado para corresponder a los parámetros algo y options proporcionados, o false en caso contrario.

Historial de cambios

Versión Descripción
7.4.0 El parámetro algo ahora espera una chaîne de caractères, pero sigue aceptando un entier para mantener la compatibilidad con versiones anteriores.

Ejemplos

Ejemplo #1 Uso de password_needs_rehash()

<?php

$password
= 'rasmuslerdorf';
$hash = '$2y$12$4Umg0rCJwMswRw/l.SwHvuQV01coP0eWmGzd61QH2RvAOMANUBGC.';

$algorithm = PASSWORD_BCRYPT;
// El parámetro cost de bcrypt puede evolucionar con el tiempo según las mejoras de hardware.
$options = ['cost' => 13];

// Primero se verifica que la contraseña coincide con el hash almacenado
if (password_verify($password, $hash)) {
// Verifica si el algoritmo o las opciones han cambiado
if (password_needs_rehash($hash, $algorithm, $options)) {
if (
password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) {
// Se crea un nuevo hash para actualizar el anterior
$newHash = password_hash($password, $algorithm, $options);

// Actualizar la entrada del usuario con $newHash
}

// Ejecutar el inicio de sesión del usuario
}
?>