ircmaxellが書いたpassword_compatというスクリプトを使用しています。彼の指示には正しく従ったと思いますが、 を使用してパスワードを確認できないようですpassword_verify($password, $hash)
。
データベースに保存されているハッシュ化されたパスワードは次のとおりです。
$2y$10$zYpSzIj7kTPv3H7wDI/uXSYqi1se46b38uumP6SM4XGMmsjU3q
私は PDO を使用してハッシュ化されたパスワードを取得しpassword_verify($password, $hash)
、ログインフォームが投稿しているものを比較するために使用しています。BRCYPT はハッシュ関数ではないため、password_verify($password, $hash)
魔法のように機能することは私の理解です。ソルトがどのように作成されるかはわかりませんが、新しいパスワードごとにカスタムソルトが作成されると思いますが、それを保存したパスワードと比較する方法がわかりません。正しいソルトとパスワードをどのように一致させますか? この全体がデータベースに塩を保存していないことは、私を混乱させます、笑。これが私が使用しているコードです。
bcrypt
if($login->verifyip($_SERVER['REMOTE_ADDR']))
{
require_once 'password.php'; //password_compat supplied file
$username = $_POST['username'];
$password = $_POST['password'];
$dbpassword = $login->GetPassword($username); // pull saved password from db
// verify posted password with saved password
if(password_verify($dbpassword, $password))
{
echo 'verified';
}
else
{
echo 'not verified';
}
}
PDO
public function GetPassword($username)
{
$passwordSQL = 'CALL get_password(:_user)'; // using stored procedure
try
{
$pdo = new PDO('my login stuff');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$password = $pdo->prepare($passwordSQL);
$password->bindParam(':_user',$username);
$password->execute();
$fetch = $password->fetchColumn(0);
$password->closeCursor();
return $fetch;
}
catch(PDOException $e)
{
return 'error' . $e->getMessage();
exit();
}
}
ブレンダーが提案したように $hash を削除しました。
ご覧いただきありがとうございます:)