2016-03-26 11 views
1

私はこのコードをPHPウェブサイトから入手しました。私は塩なしでこの仕事をすることができます。しかし、どのように塩で確認するのですか?それとも、変数に保存して後で使用する必要がありますか?確認する次の手順に進む方法がわからないハッシュを作る方法についてのチュートリアルはたくさんありますが、検証することは別のことです。ありがとうございました。 ()password_hashBcrypt、どのようにランダムな塩で確認しますか?

$options = [ 
'cost' => 11, 
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM), 
]; 
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n"; 


// See the password_hash() example to see where this came from. 
$hash = '$2y$11$nJp/w0OC41I0m44T9OQKBuWUrQi63PrJuvDc68KI6oDBdnZK01kiW '; 

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

答えて

1

注返さハッシュの一部としてアルゴリズム、コスト及び塩を返します。したがって、ハッシュを検証するために必要なすべての情報が含まれています。これにより、ベリファイ機能は、塩またはアルゴリズム情報のための別個の記憶装置を必要とせずにハッシュを検証することができる。

出典:あなたは上記したようhttp://php.net/manual/en/function.password-verify.php

だけの機能を使用し、それが自動的に塩を検出します。

省略すると、パスワードハッシュごとにpassword_hash()によってランダムな塩が生成されます。これが意図された動作モードです。

ソース:あなたは、塩を追加しない場合でも、あなたは塩漬けされたパスワードを検証し、問題があってはならないので、http://php.net/manual/en/function.password-hash.php

、password_hashは自動的に、ランダムに生成されたものを追加します。塩のオプションはPHP 7.0.0で廃止されました

もあることに注意してください。既定で生成される塩を単に使用することが今や好ましい。

+0

私が混乱していると思うのは、塩を暗号化するのを助けるために塩が追加されていないことと、今は無作為にインクルードされています。データベース? – DDJ

+0

たとえば、password_hash()関数がこのハッシュを生成したとしましょう: '$ 2a $ 10 $ vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa'。 '2a'は暗号アルゴリズム(この場合はBCRYPT)を識別し、' 10'はコスト(あなたの場合は11)であり、 'vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa'は連結された暗号とテキストです。改変されたBase-64でコードされる。最初の22文字は、塩の16バイトの値にデコードされます。より良い説明については、この[回答](http://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in-salts?rq=1)をチェックしてください:) –

関連する問題