PHP Verifica di una password contro un hash


Esempio

password_verify() è la funzione built-in fornita (a partire da PHP 5.5) per verificare la validità di una password rispetto a un hash noto.

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

Tutti gli algoritmi di hashing supportati memorizzano le informazioni identificando quale hash è stato utilizzato nell'hash stesso, quindi non è necessario indicare quale algoritmo si sta utilizzando per codificare la password in chiaro con.

Se le funzioni password_ * non sono disponibili sul sistema (e non è possibile utilizzare il pacchetto di compatibilità collegato nei commenti seguenti) è possibile implementare la verifica della password con la funzione crypt() . Si prega di notare che devono essere prese precauzioni specifiche per evitare attacchi a tempo .

<?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';
    }
}
?>