2016-03-28 9 views
0

hereのパスワード・チュートリアルに従おうとしています。私は仕事にユーザーを追加しました(私の塩は今のところハードコードされています - mcrypt_create_ivがありません)。とにかく、私がパスワードをチェックすることにフォローアップすると、私は偽になり、ハッシュが異なります。ハッシュ・イコールが正しく動作しない

hash_equals($user->hash, crypt($password, $user->hash)) 

私はcrypt($password, $user->hash)ため$user->hashため*0*1を取得していますか?チュートリアルごとに等しくする必要があります。

値は何を意味していますか? *0私のパスワード暗号化機能が動作しないようですか?ここで

は、パスワードを暗号化するための私のコードです:

$cost = 10; 

    // Create a random salt 
    #$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.'); 
    $salt = 'Banana'; 
    $salt = sprintf("$2a$%02d$", $cost) . $salt; 
    $hash = crypt($password, $salt); 

と塩とパスワードの組み合わせを変えることで、私は*0を得続けるので、何かが間違っている必要があります。ライブラリをロードする必要がありますか?何かが欠けているように見えますが、私は何がわかりません。

+0

正式なパスワードハッシュライブラリhttp://php.net/manual/en/ref.password.php – JimL

+0

おかげさまで、ありがとうございます。それはライブラリを使用するための標準的なアプローチですか? –

答えて

2

あなたは本当にただUSER->ハッシュは、塩として、で暗号化された$パスワードに等しいされている場合、ここであなたがチェックしている

$hash = password_hash('Banana', PASSWORD_DEFAULT, ['cost' => 10]); 

if (password_verify('Banana', $hash)) { 
    echo 'Password is valid!'; 
} 

http://php.net/manual/en/ref.password.php

+0

よろしくお願いいたします。それを調べます。 –

+0

うーん、走ってきた、ありがとう。しかし、彼らはPHP更新でPASSWORD_DEFAULTを変更することができると書いています。それが起こると、パスワードDB内のすべてのハッシュも変わるでしょうか? –

+1

@ElDude *結果を60文字を超えて拡張できるデータベース列に格納することをお勧めします(255文字が良い選択です)* - 古いパスワードは有効で実際の60記号のハッシュとして表示されたままです。しかし、新しいものはもっと長くなるかもしれません(255まで)。 'password_verify'は両方のバージョンで動作するほどスマートになります。 – Axalix

0
hash_equals($user->hash, crypt($password, $user->hash)) 

libに公式のパスワードハッシュを使用する必要がありますパスワードをパスワードと比較するのではなく、以下のようにsaltで暗号化してuser-> hashに変換します。

また、password_hash()関数とpassword_verify()関数を使用して行うことをお勧めします。

関連する問題