Javascript 用户密码经过哈希和盐析,试图允许用户在前端更改密码?

Javascript 用户密码经过哈希和盐析,试图允许用户在前端更改密码?,javascript,php,mysql,Javascript,Php,Mysql,起初密码更改是有效的,但当我添加哈希和salt时,现在用户无法更改密码 (持续获取:当前密码不正确) 以下是注册页面: session_start(); if($_SESSION['user']!=''){header("Location:welcome.php");} $dbh=new PDO('mysql:dbname=doctor;localhost', 'root', ''); $email=$_POST['mail']; $password=$_POST['pass'];

起初密码更改是有效的,但当我添加哈希和salt时,现在用户无法更改密码 (持续获取:当前密码不正确)

以下是注册页面:

session_start();
    if($_SESSION['user']!=''){header("Location:welcome.php");}
$dbh=new PDO('mysql:dbname=doctor;localhost', 'root', '');
$email=$_POST['mail'];
$password=$_POST['pass'];

    if(isset($_POST) && $email!='' && $password!=''){
$sql=$dbh->prepare("SELECT id,password,psalt FROM users WHERE 
username=?");
$sql->execute(array($email));
      while($r=$sql->fetch()){
$p=$r['password'];
$p_salt=$r['psalt'];
$id=$r['id'];
}
$site_salt="mysalt";/
$salted_hash = hash('sha256',$password.$site_salt.$p_salt);

    if($p==$salted_hash){
    $_SESSION['user']=$id;
    header("Location:welcome.php");
       }else{
 echo "Username OR Password is Incorrect...";
}
}
下面是JavaScript:

function validatePassword() {
var currentPassword,newPassword,confirmPassword,output = true;

currentPassword = document.frmChange.currentPassword;
newPassword = document.frmChange.newPassword;
confirmPassword = document.frmChange.confirmPassword;

if(!currentPassword.value) {
currentPassword.focus();
document.getElementById("currentPassword").innerHTML = "required";
output = false;
}
else if(!newPassword.value) {
newPassword.focus();
document.getElementById("newPassword").innerHTML = "required";
output = false;
}
else if(!confirmPassword.value) {
confirmPassword.focus();
document.getElementById("confirmPassword").innerHTML = "required";
output = false;
}
if(newPassword.value != confirmPassword.value) {
newPassword.value="";
confirmPassword.value="";
newPassword.focus();
document.getElementById("confirmPassword").innerHTML = "not same";
output = false;
}   
return output;
}
假设有一个用户名为该用户名的用户,则您的第一个脚本存在问题:

if($_POST["currentPassword"] == $row["password"])

这会将表单中的原始密码(
$\u POST[“currentPassword”]
)与结果中的哈希密码(
$\u POST[“currentPassword”]
)进行比较。您需要做的是比较两个密码的哈希形式。您需要使用存储用户密码之前使用的相同哈希函数对表单中的密码进行哈希运算。

if($\u POST[“currentPassword”]==$row[“password”]){
是将密码作为明文进行比较……如果你在数据库中对密码进行哈希运算,那么它们当然不匹配。你必须先对输入密码进行哈希运算,然后再将其与存储的密码哈希运算进行比较。这就是哈希运算的全部要点,它与密码不同。是时候开始学习了/也是一个很好的时间o开始学习MySQLi或PDO,并使用带有绑定变量的准备语句……您在注册页面上使用它们,因此也可以在更改密码时使用它们……保持一致^他们所说的一切,只是为了强调:)
if($_POST["currentPassword"] == $row["password"])