-1

関数についてphp.netのマニュアルを読みましcrypt()た。そして、ここに私のコードがあります:

#code.....
#we retrieve existing salt and password from database
$salt=$saltquery['salt'];
#$ex_password - existing password
$ex_password=$saltquery['pass'];
#$pass defined earlier. that's input
$password_hash=crypt($pass, '$2a$07$'.$salt.'');
if (crypt($password_hash, $ex_password)==$ex_password) {
 #everything is ok
} else {
 #username/password combination doesn't exists
 $msgText = "Oops! Check your username and password";
 $pass=NULL;
}

それでも「おっと!」というエラーが表示されます。ユーザー名とパスワードを確認してください。」データベースと出力を確認する$password_hashと、一致します。たぶん、次のようにコーディングする方が良いでしょう:

#.....
if ($password_hash==$ex_password){}
#.....
4

3 に答える 3

2

$password_hash を 2 回暗号化しているのはなぜですか?

あなたの比較は次のようになると思います:

$password_hash=crypt($pass, '$2a$07$'.$salt);
$password_hash_check($ex_password, '$2a$07$' . $salt);
if ($password_hash === $password_hash_check) {
 #everything is ok
} else {
 #username/password combination doesn't exists
 $msgText = "Oops! Check your username and password";
 $pass=NULL;
}
于 2012-08-03T17:23:27.887 に答える
2

パスワードをチェックするときは、ユーザー入力を crypt 関数に渡す必要があります (cryptドキュメントを参照してください)。

if (crypt($user_input, $hashed_password) == $hashed_password) {
   echo "Password verified!";
}

現在、新しい (別の) パスワード ハッシュを計算し、保存されているものと比較しています。

于 2012-08-03T17:26:03.257 に答える
1

これがあなたが望むものだと思います:

$password_hash=crypt($pass, '$2a$07$'.$salt.''); // crypt input
if ($password_hash== $ex_password) // check against crypted 
                                   // password stored in the database
于 2012-08-03T17:30:22.617 に答える