-1

40文字のソルトを生成するページを作成し、入力されたパスワードを取得して、このPHPコードを使用してハッシュを作成し、以下を使用してソルトとハッシュされたパスワードをデータベースに挿入します(これは関連する行です)。

$hashedpassword = sha1($password . $salt);

次に、ログインプロセスで、入力したパスワードを使用し、dbからsaltを取得して、同じコード行を使用してhasを作成します(これも関連する行です)。

$hashedpassword = sha1($storedPassword . $storedSalt);

ただし、保存されているハッシュパスワードと一致しないため、エラーが発生したかどうかを確認するために、情報を「エコー」して、何が起こっているのかを読み取れるようにしました。

$storedSalt = $row_rsSaltLookup['salt'];
$storedPassword = $row_rsSaltLookup['password'];
$storedHashedPassword = $row_rsSaltLookup['hashedpassword'];
    //use the stored salt to hash the user's submitted password
$hashedpassword = sha1($storedPassword . $storedSalt);
echo "Salt: " . $storedSalt . "<br/>";
echo "Stored Password: " . $storedPassword . "<br/>";
echo "Stored Hashed Password: " . $storedHashedPassword . "<br/>";
echo "Pre-hash: " . $storedPassword . $storedSalt . "<br/>";
echo "Hashed Password: " . $hashedpassword . "<br/>";
echo "re-Hashed Password: " . sha1($storedPassword . $storedSalt) . "<br/>";
echo "re-Hashed Password 2: " . sha1($storedPassword . $storedSalt) . "<br/>";
if($storedHashedPassword != $hashedpassword) {
     echo "NO MATCH";
}else{
     echo "MATCH";
}
exit();

そして私は結果としてこれを得る:

Salt: 4039505cc4efae2
Stored Password: ujwiervdhyf
Stored Hashed Password: aa27c197dfd88cd2f0d46b84d259016a15bd3954
Pre-hash: ujwiervdhyf4039505cc4efae2
Hashed Password: b06193ed26617c449902ac813376cf0c33bec3d1
re-Hashed Password: b06193ed26617c449902ac813376cf0c33bec3d1
re-Hashed Password 2: b06193ed26617c449902ac813376cf0c33bec3d1
NO MATCH

この例では、「ソルト」が生成され、アカウントが作成されてハッシュされたときのパスワード(保存されたパスワード)と一緒にまとめられます(保存されたハッシュされたパスワード)。ログインに行くとき、dbからソルトを取得し、ログイン時にパスワードに追加し、それをハッシュして、保存されているハッシュされたパスワードと比較します。これは同じである必要がありますか?ハッシュが一致しない理由がわからないので、どこが間違っていたのか疑問に思います。

4

1 に答える 1

2

もしも

$hashedpassword = sha1($storedPassword . $storedSalt);
                       ^^^^^^^^^^^^^^^

アカウントが最初に作成されたときに保存したハッシュですが、これは間違っています。ハッシュをハッシュしていますが、これは機能しません。そのはず

$hash_of_attempted_password = sha1($password_from_login_form . $storedSalt);
if ($hash_of_attemped_password == $hash_of_original_password) {
   ... it's a match ...
}
于 2012-09-21T20:51:12.603 に答える