PHP & MYSQL: mit bcrypt-hash und überprüfen der Passwort-Datenbank
Ich bin mit Mr. Andrew Moore ' s Methode (Wie verwenden Sie bcrypt für das Hashen der Passwörter in PHP?) von hashing-Kennwort des Benutzers. Was ich getan habe ist, ich habe eine Seite " Registrierung und verwendet es
$bcrypt = new Bcrypt(12);
$pass = $_POST['password']; //register password field
$hash= $bcrypt->hash($pass);
//then inserts $hash into database with users registered email (I've checked my mysql database and it indeed has an hashed item
Dann habe ich eine login-Seite, bestehend aus E-Mail-und Passwort-Felder. Mein Gedanke ist, dass E-Mail-Adressen sind einzigartig in meiner Datenbank. Also, denken Sie daran, ich habe ein Skript, in dem Sie überprüfen die Benutzer E-Mail-Adresse zuerst, dann, wenn es eine bestehende, überprüfen Sie die hash-Passwort mit dieser
$bcrypt = new Bcrypt(12);
$email = $_POST['email']; //from login email field
$pass_l = $_POST['password']; //from login password field
$hash_1= $bcrypt->hash($pass_1);
$chk_email= $dbh->prepare("SELECT password FROM table WHERE email = ?");
$chk_email -> execute(array($email));
while($row = $chk_email->fetch(PDO::FETCH_ASSOC)){
$chk_pass = $row['password']; //inside a while loop to get the password
$pass_isGood = $bcrypt->verify($hash_1, $chk_pass);
var_dump($pass_isGood); //I'm getting false
}
Ich bin mir nicht sicher, was ich falsch mache, ich bin, soll wahr werden. Und ich habe mein tablefield zu text
oder sogar varchar(256)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Andrew Moore ist Klasse, müssen Sie rufen Sie die Klasse
verify()
Methode, um zu überprüfen, dass der Benutzer das Passwort entspricht dem hash. Die zwei Parameter die übergeben werden sind der nur-Text-Kennwort des Benutzers eingegeben werden und der hash, die Sie in der Datenbank gespeichert.Scheint es, Sie übergeben einen zweiten Hash-Passwort zu
verify()
statt, das ist der Grund, warum es nicht funktioniert. Pass in die Klartext-Passwort als erstes argument.Also nur eindeutig sein und bauen auf @Michael die Antwort (da war ich auf der Suche über Andrew Mooore ist Lösung zu):
stattdessen:
diese benötigen Sie: