1

loginテーブルに2つのフィールドがあります

  • パスワード

そして、私は塩を生成するこの小さな機能を持っています

function random_salt($h_algo="sha512"){
        $salt1=uniqid(rand(),TRUE);
        $salt2=date("YmdHis").microtime(true);
        if(function_exists('dechex')){
            $salt2=dechex($salt2);
        }
        $salt3=$_SERVER['REMOTE_ADDR'];
        $salt=$salt1.$salt2.$salt3; 

        if(function_exists('hash')){
            $hash=(in_array($h_algo,hash_algos()))?$h_algo:"sha512";
            $randomsalt=hash($hash,md5($salt)); //returns 128 character long hash if sha512 algorithm is used.
        }else{
            $randomsalt=sha1(md5($salt)); //returns 40 characters long hash
        }

        return $randomsalt;
    }

ユーザーパスワードを作成するには、次のようにします

$userinput=$_POST["password"] //don't bother about escaping, i have done it in my real project.
$static_salt="THIS-3434-95456-IS-RANDOM-27883478274-SALT"; //some static hard to predict secret salt.
$salt=random_salt(); //generates 128 character long hash.
$password =sha1($salt.$userinput.$static_salt);

$saltsaltデータベースのフィールドに保存され、フィールドに$password保存されpasswordます。

私の問題、 functionrandom_salt()では、これは安全なソルトを生成しない可能性がありますが、物事を複雑にしているだけだと感じています。私が正しい方向に進んでいるかどうか、誰かが私に光を投げてくれますか?

cryptPS関数などについてのアイデアはあります。私のコードは大丈夫ですか?

ありがとう。

4

2 に答える 2

2

この質問/回答を実際に確認する必要があります ::
PHP でパスワードをハッシュするために bcrypt を使用するにはどうすればよいですか?

要するに、必要がなければ自分でロールしないでください。

于 2012-11-04T10:59:42.050 に答える
1

これは明らかにセキュリティ上の問題です。

uniqid(rand(),TRUE);

rand() のシードはどのように設定しましたか? エントロピープールはどこですか? 答えられない限り、ソルトは予測可能であると見なす必要があります。覚えておいてください: セキュリティはコードの不明瞭さから生じるものではありません。

適切な PRNG を選択すると、他のすべてのソルト (サーバー名、静的な長いソルト、時間など) は無関係になります。

于 2012-11-04T10:59:04.833 に答える