パスワードをハッシュする際に使用するランダムな塩を生成しようとしています。 私は少しパスワードハッシングに新しいですが、私は理解して、BCryptアルゴリズムを使用すると、結果として60文字長いハッシュ文字列を取得します。ランダムな塩を生成してBcryptで使用する
22文字これらの60文字のうち、ソルト値は結果のハッシュの前に付加されます。
私はランダムに生成された塩は、実際のハッシュの前に追加されようとしているものと同じであることを確認する簡単なコードを使用:
$salt = substr(strtr(base64_encode(openssl_random_pseudo_bytes(22)), '+', '.'), 0, 22);
echo "Salt Value is: ".$salt . "\n";
出力した:、ソルト値は次のとおりです。XKFB8DHMiXaYTzRAHtRhX7次のように
は、その後、私は同じ生成された塩を使用してパスワードを暗号化:
$cost = 8;
$EncryptedPassword = password_hash($Password, PASSWORD_BCRYPT, ['cost' => $cost,'salt' => $salt]);
echo "Encrypted Password: " . $EncryptedPassword . "\n";
出力がnでした私が期待したものotの:
暗号化されたフォーマット:$ 2Y $ 10 $ XKFB8DHMiXaYTzRAHtRhXutlLLG8XIZjj5XGeyoUZobEtnkOn/M/S 得られた塩は、まさに私はハッシュのために使用されるものではない、塩値のすなわち、その最後の文字は常に異なっています。
ランダムに生成される塩である:XKFB8DHMiXaYTzRAHtRhX7
得られた塩の値は次のとおりです。XKFB8DHMiXaYTzRAHtRhXu
は、私の質問は、問題になることができるものであり、どのように私は同じランダムに生成されたsalt値を得ることができますそれを変更せずにパスワードハッシュ文字列に埋め込まれている?
なぜpassword_hashを使用しないのですか? http://php.net/manual/en/function.password-hash.php – mkaatman
塩を生成する必要はありません。 'password_hash()'がそれを行います。 –
zaphの回答をお勧めしますが、切り捨てられた塩の理由に興味があるなら、この[説明](https://stackoverflow.com/a/16280909/575765)を読んでください。 – martinstoeckli