2017-06-28 11 views
0

パスワードをハッシュする際に使用するランダムな塩を生成しようとしています。 私は少しパスワードハッシングに新しいですが、私は理解して、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値を得ることができますそれを変更せずにパスワードハッシュ文字列に埋め込まれている?

+0

なぜpassword_hashを使用しないのですか? http://php.net/manual/en/function.password-hash.php – mkaatman

+2

塩を生成する必要はありません。 'password_hash()'がそれを行います。 –

+0

zaphの回答をお勧めしますが、切り捨てられた塩の理由に興味があるなら、この[説明](https://stackoverflow.com/a/16280909/575765)を読んでください。 – martinstoeckli

答えて

1

password_hash()とそのコンパニオンpassword_verify()をPHPに使用する方が簡単で安全です。

CRYPT_BLOWFISHアルゴリズムを使用してハッシュを作成します。これは、 "$ 2y $"識別子を使用して標準のcrypt()互換ハッシュを生成します。

塩なしは提供する必要があります。これは、PHP 7.xではsaltオプションが削除されています。

例:password_hash("aPassword", PASSWORD_BCRYPT)

+0

次のコードを使用して、同じ塩がハッシュで使用されていることを確認しようとしています: '<?php $ binarySalt = mcrypt_create_iv(16、MCRYPT_DEV_URANDOM); $ salt = substr(strtr(base64_encode($ binarySalt)、 '+'、 '。')、0、22); $ Password = "test"; エコーnl2br( "ソルト値は:"。$塩。 "\ n"); $費用= 8; $ EncryptedEnteredPassword = password_hash($パスワード、PASSWORD_BCRYPT、['コスト' => $コスト、 '塩' => $塩]); エコーnl2br( "暗号化されたパスワード:"。$ EncryptedEnteredPassword。 "\ n"); ?> ' 最後の塩文字が異なる –

+0

ポイントは同じ塩を使用していない、なぜ同じ塩を使用したいですか? – zaph

+0

私はそれを使用していない、私はちょうどそれが何が起こっているかを確認することができたのでそれをエコーし​​た。なぜ私は別の塩の最後の文字を取得しているのか知る必要があります –

関連する問題