Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwende ich die Methode password_hash() von PHP?

Sie sollten das rohe, nicht gehashte Passwort als password_verify() überprüfen führt das erneute Hashing des rohen Passworts unter Verwendung der Hash-Routine durch, die beim Erstellen des gehashten Passworts verwendet wurde.

Wenn Sie sich das Ergebnis von password_hash() ansehen Im Hash sind Informationen darüber gespeichert, welche Hash-Routine verwendet wurde, um diesen Hash zu erstellen, und wie er generiert wurde

$password = 'FredsTheMan';

$hash = password_hash($password, PASSWORD_BCRYPT);

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

Ein weiterer häufiger Fehler in diesem Bereich besteht darin, der Spalte, die Sie in der Datenbanktabelle verwenden, nicht genügend Zeichen zu geben, um das vollständige Ergebnis des Hashs aufzunehmen

Der mit PASSWORD_BCRYPT generierte Hash hat 60 Zeichen

$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K

Achtung, wenn andere Hashes in der Zukunft bereitgestellt werden, können sie zu einem Hash mit mehr als 60 Zeichen führen

Kurz gesagt, Ihr Code sollte

sein
$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;
}