PHP Verificando una contraseña contra un hash


Ejemplo

password_verify() es la función incorporada provista (a partir de PHP 5.5) para verificar la validez de una contraseña contra un hash conocido.

<?php
if (password_verify($plaintextPassword, $hashedPassword)) {
    echo 'Valid Password';
}
else {
    echo 'Invalid Password.';
}
?>

Todos los algoritmos de hash admitidos almacenan información que identifica qué hash se usó en el hash mismo, por lo que no es necesario indicar con qué algoritmo está utilizando para codificar la contraseña de texto simple.

Si las funciones password_ * no están disponibles en su sistema (y no puede usar el paquete de compatibilidad vinculado en las observaciones a continuación), puede implementar la verificación de contraseña con la función crypt() . Tenga en cuenta que deben tomarse precauciones específicas para evitar los ataques de tiempo .

<?php
// not guaranteed to maintain the same cryptographic strength of the full `password_hash()`
// implementation
if (CRYPT_BLOWFISH == 1) {
    // `crypt()` discards all characters beyond the salt length, so we can pass in
    // the full hashed password
    $hashedCheck = crypt($plaintextPassword, $hashedPassword);

    // this a basic constant-time comparison based on the full implementation used
    // in `password_hash()`
    $status = 0;
    for ($i=0; $i<strlen($hashedCheck); $i++) {
        $status |= (ord($hashedCheck[$i]) ^ ord($hashedPassword[$i]));
    }

    if ($status === 0) {
        echo 'Valid Password';
    }
    else {
        echo 'Invalid Password';
    }
}
?>