皆さんに簡単な質問があります:
私は PHP をいじっています (私は比較的経験が浅いです)、自分のサイトで使用する安全なパスワード ハッシュ システムの開発に興味があります。crypt()
SO に関する他の記事や質問を通じて、BSD のbcrypt
ハッシュ アルゴリズムの実装にはPHP の関数を使用する必要があると推測しました。
あなたへの私の質問は、関数に初期化ベクトルまたはパスワードを入力すると、base64 ではない入力がハッシュとして「0」を返すように見えるという事実に関するものです。この問題を回避するために私が実装したものは次のとおりです。
$salt = base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM));
と
$password = base64_encode($password);
このようにエンコーディングを変更すると、衝突やセキュリティの低下の危険性はありますか?
私の考えは、ハッシュ関数が空のハッシュを返すことを心配することなく、ユーザーがパスワードに任意の範囲の文字を使用できるようにしたいということでした (適切なパスワード ポリシーを適用します)。
これを行うためのよりシンプルまたはエレガントな方法はありますか? おそらく、ソルトとパスワードをあまり制限しないハッシュ関数を使用する必要がありますか?
あなたが私に与えることができる助けを前もって感謝します。