Web サイトでユーザーを登録するときに、パスワードをハッシュするこの方法があります。私が知る限り、これは完全に機能します。データベースに $password_hash と $salt を保存しています。しかし、ログインのためにユーザーを認証しようとすると問題が発生し、取得したハッシュが一致しません。
登録機能
$salt = createSalt();
$password = createPassword();
$hash = hash('sha256', $password);
$password_hash = hash('sha256', $salt . $hash);
ログイン機能
$query = "SELECT Password_Hash,Salt FROM accounts WHERE Email = ' ".$email." ' ";
$result = mysqli_query($mysqli, $query);
$rows = mysqli_fetch_assoc($result);
$hash = hash('sha256', $password);
$password_hash = hash('sha256', $rows['Salt'] . $hash);
パスワード作成機能
function createPassword()
{ /*This function is used to create the password for the user */
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
for ($i = 0; $i < 8; $i++)
{
$n = rand(0, strlen($alphabet)-1);
$pass[$i] = $alphabet[$n];
}
return implode($pass);
}
2 つのパスワード ハッシュが一致しません。私が間違っていることはありますか?出力の下の画像。最初の行は DB 出力です