Wenn das, was Sie in der Datenbank gespeichert haben eine SHA1-Prüfsumme ist, dann ist das, was Sie vergleichen müssen.
Die Details sind ziemlich skizzenhaft.
Unter der Annahme, dass die Zeile in die Datenbank als
INSERT INTO `account` (`username`, `sha_pass_hash`, ...
VALUES ('Meko', SHA1('Meko:1234'), ...
Dann für die Existenz dieser Zeile zu überprüfen gespeichert wurde, gegeben:
$user_username = 'Meko' ;
$user_password = '1234' ;
wenn das sind die Werte, die Sie in übergeben möchten die Datenbankabfrage, dann
$sql = 'SELECT ...
FROM account a
WHERE a.username = ?
AND a.sha_pass_hash = SHA1(CONCAT(? ,':', ?)';
$sth = $dbh->prepare($sql);
$sth->bindValue(1,$user_username, PDO::PARAM_STR);
$sth->bindValue(2,$user_username, PDO::PARAM_STR);
$sth->bindValue(3,$user_password, PDO::PARAM_STR);
$sth->execute();
if($row = $sth->fetch(PDO::FETCH_ASSOC)) {
// matching row found
} else {
// no matching row found
}
$sth->closeCursor();
Wenn Sie die MySQL-SHA1-Funktion nicht verwendet und eine andere Funktion zur Berechnung des Hashwerts verwendet haben, verwenden Sie dieselbe Funktion, wenn Sie die Überprüfung durchführen.
Das heißt, wenn die Zeile durch eine Erklärung eines Formulars mehr wie
INSERT INTO account (username, sha_pass_hash, ...)
VALUES ('Meko','7c4d046a92c441c426ce86f15fa9ecd1fc1fd5f1', ...)
Dann für die Existenz dieser Zeile zu überprüfen eingefügt wurde, gegeben:
$user_username = 'Meko' ;
$user_password = '1234' ;
Dann gehen Sie bitte zum Überprüfen Sie für die Existenz der Zeile wäre so etwas wie folgt:
$sql = 'SELECT ...
FROM account a
WHERE a.username = ?
AND a.sha_pass_hash = ?';
berechnen Sie das Passwort Hash, das gleiche Art und Weise, wie wenn es ursprünglich
getan
$user_sha_hash = sha1($user_username . ':' . $user_password) ;
Und vorbereiten und die Abfrage ausführen, in dem Prüfsumme SHA String
$sth = $dbh->prepare($sql);
$sth->bindValue(1, $user_username, PDO::PARAM_STR);
$sth->bindValue(2, $user_sha_hash, PDO::PARAM_STR);
$sth->execute();
if($row = $sth->fetch(PDO::FETCH_ASSOC)) {
//
} else {
//
)
$sth->closeCursor();
Die Antwort auf Ihre Frage vorbei ist 'CONCAT()'. Die tatsächliche Antwort besteht darin, Ihre Daten mithilfe eines Migrationsskripts zu reparieren. – CodeCaster
Speichern Sie Kennwörter wirklich als Nur-Text? Das ist sehr gefährlich. – symcbean
Nein, ich speichere Passwörter nicht im Klartext. Die Passwörter sind in sha1 – Kh4zy