0

ランダムなソルトを指定して、そこからパスワード ハッシュを生成するハッシュ関数を作成しようとしています。

問題は、2 人の異なるユーザーに同じパスワードを入力すると、生成されるハッシュが両方で同じになることです。

何が問題なのですか?

public function generateSalt()
{       


     return $salt = substr(sha1(uniqid(rand(), true)), 0, 32);
}

public function pwdEncrypt($password, $salt)
{       

    $hash = crypt($password, '$2a$' . $salt . '$');     
    return $hash;
}

public function registerUser($nome, $email, $password, $permitions, $active)
{



    $this->nome = $nome;
    $this->email = $email;


    $salt = $this->generateSalt();


    $this->password = $this->pwdEncrypt($password, $salt);

   //INSERT METHODS BELOW
}
4

2 に答える 2

3

それはあなたcryptがblowfishで使う方法ではありません($2a$

強さ、最後に塩を指定する必要があります。

これを試してcrypt($password, '$2a$08$'.$salt);

明らかに、処理時間を犠牲にして、セキュリティを向上させるために強度を高めます。

また、5.3.7以降のPHPバージョンを使用している場合は、2011年にの攻撃が発見され$2y$たため、blowfishアルゴリズムに使用する必要があります。$2a$

于 2012-07-27T13:45:08.297 に答える
2

crypt()標準の Unix DES ベースのアルゴリズムを使用して、ハッシュされた文字列を返します。

標準の DES ベースのハッシュには、アルファベット "./0-9A-Za-z"の2 文字のソルトがあります。

あなたの場合、ソルトの最初の3文字は常に同じなので、使用されるソルトは常に同じです。

使用する

return $salt = substr(sha1(uniqid(rand(), true)), 0, 2);

$hash = crypt($password, $salt);   
于 2012-07-27T13:44:01.613 に答える