Код на моей странице регистрации:
$p_salt = rand_string(20);
$site_salt="subinsblogsalt"; /*Common Salt used for password storing on site.*/
$salted_hash = hash('sha256', $password.$site_salt.$p_salt);
Затем я вставляю соль в базу данных вместе с соленными паролями, но когда я делаю это на своей странице входа:
if(isset($_POST) && $email!='' && $password!=''){
$sql=$dbh->prepare("SELECT id,password,psalt FROM user WHERE email='".$email."'");
$sql->execute(array($email));
while($r=$sql->fetch()){
$p=$r['password'];
$p_salt=$r['psalt'];
$id=$r['id'];
}
$site_salt="subinsblogsalt";/*Common Salt used for password storing on site. You can't change it. If you want to change it, change it when you register a user.*/
$salted_hash = hash('sha256', $password.$site_salt.$p_salt);
Но они совсем не совпадают, я повторил соленый хеш, чтобы сравнить его с таковым в базе данных, но они разные.
Вы создаете и сохраняете пароль с помощью:
$salted_hash = hash('sha256', $password.$site_salt.$p_salt);
Но когда вы восстанавливаете пароль из своей таблицы, вы шифруете, чтобы сравнить введенный пароль.
При сравнении паролей используйте $p_salt
.