1

ユーザーがパスワードを入力する登録ページがあるので、このパスワードをハッシュし、データベースでハッシュします

しかし、ログインしようとすると、パスワードが一致しないことがわかり、エコーすると、新しいパスワードを書いたように一致しません

この問題を解決する方法は誰でも私を助けることができますか???

レジスタ内の cryptpass 関数

function cryptPass($input, $rounds = 9)
{
    $salt = "";
    $saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
    for($i = 0; $i<22; $i++)
    {
        $salt  .=$saltChars[array_rand($saltChars)]; 
    }
    return crypt($input, sprintf('$2y$%02d$', $rounds) . $salt);
}
$hashedpass = cryptPass($pass1);    

ログイン時の暗号化機能

function cryptPass($input, $rounds = 9)
{
    $salt = "";
    $saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
    for($i = 0; $i<22; $i++)
    {
        $salt  .=$saltChars[array_rand($saltChars)]; 
    }
    return crypt($input, sprintf('$2y$%02d$', $rounds) . $salt);
}
$hashedpass = cryptPass($pass);   
echo $hashedpass;
4

2 に答える 2

1

パスワードソルトは、保存されたパスワードに対してハッシュされるときに同じである必要があります。通常、ユーザーがパスワードを登録/変更すると、コードによってランダムなソルトが生成されます。その後、ハッシュ化されたパスワードと一緒に、認識できる何らかの方法でデータベースに保存されます。次に、ユーザーの入力を検証するときに、そのソルトを使用してパスワードを再ハッシュします。

于 2013-05-18T23:32:05.917 に答える
0

ハッシュする前にパスワードに追加するソルトは、毎回同じでなければなりません。

ランダムなソルトを生成する代わりに、毎回使用する任意の定数を作成することをお勧めします。

$salt = '@#$JASasdjbh&*()';

もちろん、独自のスクリプトで使用する前に、これらの文字を変更する必要があります。

于 2013-05-18T22:43:49.063 に答える