あなたは、データベースに格納されていることはSHA1チェックサムであれば、それはあなたが比較する必要がありますものです。
詳細はかなりスケッチです。
$user_username = 'Meko' ;
$user_password = '1234' ;
ものはあなたに渡したい値であれば:与えられ、その行の存在を確認するために、行が
INSERT INTO `account` (`username`, `sha_pass_hash`, ...
VALUES ('Meko', SHA1('Meko:1234'), ...
としてデータベースに保存されたと仮定すると
その後、データベースクエリ、
$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();
MySQL SHA1関数を使用せず、ハッシュを計算するために他の関数を使用した場合は、チェックを行うときに同じ関数を使用します。行が与えられ、その行の有無、チェックするために、よりその後
INSERT INTO account (username, sha_pass_hash, ...)
VALUES ('Meko','7c4d046a92c441c426ce86f15fa9ecd1fc1fd5f1', ...)
のような形の文で挿入された場合、ある
:
$user_username = 'Meko' ;
$user_password = '1234' ;
次に、あなたのクエリに行の存在を確認すると、次のようになります。
$sql = 'SELECT ...
FROM account a
WHERE a.username = ?
AND a.sha_pass_hash = ?';
パスワードハッシュを計算するそれはもともとあなたの質問への答えは `CONCAT()`であるSHAチェックサム文字列に
$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();
を渡し、
を行って、クエリを作成し、実行したときのような方法。実際の答えは、移行スクリプトを使用してデータを修正することです。 – CodeCaster
実際にパスワードをプレーンテキストとして保存していますか?これは非常に危険です。 – symcbean
パスワードをプレーンテキストとして保存していません。パスワードはsha1 – Kh4zy