0

認証システムを Blowfish に移行しようとしています。私は暗号学者ではなく、Blowfish についての理解はまだ十分ではありません。

現在の設定では、sha1 と salt を使用しています。ソルトはユーザーごとに生成され、データベースに保存されます。要約すると、次のようになります。

$salt = $this->getSalt($username);
$hash = sha1($password . $salt);
if ($hash == $hashInDB)
{
     // user is authenticated, set session id etc ...
}

このgetSalt()メソッドは、指定されたユーザーのデータベースに保存されているソルトを取得します。

今、すべてを正しく理解していれば、crypt を使用して次のことを行う必要があります。

$salt = '$2a$07$' . $this->getSalt($username) . '$';
$hash = crypt($password, $salt);

if ($hash == crypt($password, $saltInDB))
{
     // The user is authenticated, set session id etc..
}

明確にするために、2 番目の例の$saltInDB変数は、「$2a$07$arandomsaltcreatedatregistration$」のような値です。

  • 私はそれを正しくやっていますか?
4

1 に答える 1

0

あなたの例はほぼ正しいです。

関数を使用してハッシュを作成するcrypt()と、使用されたパラメーター (アルゴリズム、コスト、ソルト) が生成されたハッシュの一部 (ハッシュの先頭) であることがわかります。

$2a$07$LCzy1mE0b9lS8Uyx9HEeUgHm8zH1iDDZ5...

つまり、 に置き換えることができます$saltInDB。crypt $hashInDB() 関数は、必要なパラメータを から自動的に抽出します$hashInDB。これは、ソルトの保存に関する質問にも答えます。ハッシュ値をデータベースに保存するだけで、ソルトがそこに含まれます。はい、パスワードごとに新しいソルトを生成する必要があります。

ソルトの後の「$」は必要ありません。

ここで見つけることができる bcrypt-hash を生成する方法の詳細については、十分に確立されたライブラリを探している場合は、phpassをお勧めします。

于 2012-07-18T21:31:23.810 に答える