Mysql
 sql >> Database >  >> RDS >> Mysql

Come utilizzare il metodo password_hash() di php..?

Dovresti controllare la password grezza senza hash, come password_verify() esegue il rehashing della password grezza utilizzando la routine hash utilizzata durante la creazione della password con hash.

Se guardi il risultato di password_hash() ci sono informazioni memorizzate nell'hash su quale routine hash è stata utilizzata per creare questo hash e come è stato generato

$password = 'FredsTheMan';

$hash = password_hash($password, PASSWORD_BCRYPT);

if (password_verify($password, $hash)) { 
   return true;
} else {
    return false;
}

Un altro errore comune in quest'area è non fornire alla colonna che utilizzi nella tabella del database caratteri sufficienti per contenere l'intero risultato dell'hash

L'hash generato utilizzando PASSWORD_BCRYPT è di 60 caratteri

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

Attenzione, quando vengono forniti altri hash nel furure, potrebbero risultare in un hash più lungo di 60 caratteri

Quindi in breve il tuo codice dovrebbe essere

$this->db->select('password');
$this->db->from('usersdetails');
$this->db->where('email', $email);
$this->db->limit(1);
$query = $this->db->get();
$pwd_from_db = $query->row()->password;

if (password_verify($this->input->post('password'), $pwd_from_db)) {
   return true;
} else {
    return false;
}