1

暗号化するには:

$encryptedPassword = crypt($password, '$2a$07$usesomesillystringforsalt$');

$ usesomesillystringforsalt $部分をランダム化するか修正する必要がありますか? (修正されたと思いますが、確認したいです)。


結果の例:

$2a$07$usesomesillystringforeHwaCeDEv6rYjbWCzbzsFKwD4sDLktr

これは正しい暗号化された値ですか?


ユーザーがログインするために指定したパスワードが正しいかどうかを確認するには:

( という名前の入力フィールドがあり、それをデータベースから取得しpasswordた値と比較するとします):$password

if (crypt($_POST['password'], '$2a$07$usesomesillystringforsalt$') === crypt($password, '$2a$07$usesomesillystringforsalt$')) {
    // Password submitted is correct
}
4

1 に答える 1

1

通常、ソルトはユーザーごとにデータベースに保存されるため、攻撃者がパスワードデータベース全体にアクセスした場合、攻撃者は各ユーザーを個別にブルートフォースする必要があります。

さらに、ソルトのサイトごとまたはアプリケーションごとの部分を使用して、一般的なパスワードと一般的なソルトのテーブルを確保することは理にかなっています(1文字または2文字は簡単で、日付は許容範囲内であり、エポックはエポックが難しく、128ビットのランダム性は不可能であるため、はるかに大きいマイクロ秒)をアプリケーションのデータベースに対して使用することはできません。ユーザーごとのソルトが十分に大きい場合、これはあまり役に立ちません。したがって、データベースにユーザーごとのソルトを格納するためのスペースがある場合は、それを選択してください。

于 2011-11-07T02:27:06.400 に答える