2016-04-10 12 views
0

ユーザーが登録してログインするとき、私は同じパスワードハッシュ関数を使用してプレーンテキストパスワードをハッシュします。登録時とログイン時のPHPパスワードのハッシュ値が一致しない

password_hash($password, PASSWORD_DEFAULT)

パスワードが同じではありませんが。

私は、同じパスワードで2人のユーザーを登録するだけで、この別の方法を証明できます。

例えば "管理者" は、一つのユーザに "$ 2Y $ 10 $ SyqILazLbo4jJVYvxYfwW.WgHUnSi.cRMETWoMjZXwMNa4H4tYELK"

、および他の "$ 2Y $ 10 $ gXfVz6oH4afxAL.7ytFJseZV3VERxbSYXqN7FYsRzH4IrjJw9uyO6" に変わります。これは同じなので、ユーザーキャンがこれまでにpassword_hashログインすることはありません。

を私が間違っているのは何を意味しますか?

+2

ような何か。なぜあなたは決してログインできないのだろうと言っているのですか? –

+0

ログインするには、ユーザ名とパスワードを入力します。パスワードはデータベースにハッシュされなければならないので、username = usernameでなければなりません。パスワードはパスワード=必須です。毎回ハッシュが異なる場合、パスワードはどのように等しくなりますか? – user3822370

+1

これは機能の仕組みなので、心配する必要はありません。 –

答えて

3

の例を参照してくださいあなたは、パスワードが正しいかどう検証するpassword_verifyを使用する必要があります。その関数が異なるハッシュを毎回生成されますので、普通のことだ。この

<?php 

$password = "rasmuslerdorf"; 

$hash = password_hash($password, PASSWORD_DEFAULT); 

if (password_verify($password, $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 

?> 

reference page

1

結果を確認するには、関数password_verify($user_submitted_password, $hash_in_db)を使用する必要があります。 password_hash()は、それぞれのハッシュにランダムな塩を埋め込みます。そのため、キーは異なりますが、正しく検証されます。

documentation

password_verify()
<?php 
// See the password_hash() example to see where this came from. 
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; 

if (password_verify('rasmuslerdorf', $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 
?> 
関連する問題