0

私は最近、プロジェクトの作業を開始しました。これには、パスワードをハッシュする次の機能が含まれています。

function hash_password($password) {
    $account_id = $this->account_id;

    /*
     * Cook up some randomness
     */
    $password = str_rot13($password);

    $random_chars = "1%#)(d%6^".md5($password)."&H1%#)(d%6^&HB(D{}*&$#@$@FEFWB".md5($password)."``~~+_+_O(Ed##fvdfgRG:B>";

    $salt = $account_id;
    $salt = ((int)$salt * 123456789) * 1000;

    $salt_len     = strlen($salt);

    for($i=0; $i <= $salt_len; $i++) {
        $salt .= $random_chars[$i];            
    }

    $salt = str_repeat($salt, 3);

    return hash('sha256', base64_encode($password.$salt.$password), false);
}

*$account_id は各ユーザー アカウントに固有です。

私の質問は次のとおりです:この関数は、次のような単純なことを行うよりも安全ですか?

$salt = sha1($account_id);
$hash = hash('sha256', base64_encode($password.$salt), false);

乾杯!

4

1 に答える 1

0

アカウント ID をソルトとして使用することは、おそらく良い考えではありません。誰かがハッシュ化されたパスワードを盗むことができれば、アカウント ID も取得できる可能性があります。したがって、コードが十分に保護されていれば、このインスタンスのコードでより複雑なハッシュを使用する方がおそらく安全です。既知のランダムな文字列をコードのソルトとして使用すると、誰かがパスワードを攻撃するためにデータとコードの両方をハッキングする必要があります。これは、データベースだけを攻撃するよりも優れているはずです。

于 2012-06-07T13:20:02.663 に答える