我正在尝试为登录系统使用php mysqli prepare语句。但我的登录功能不起作用。我不确定如何从数据库中检索加密密码并将其用于身份验证。
这是我的处理身份验证的登录功能
public function getUserByEmailAndPassword($email, $password) {
$stmt = $this->conn->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$dbpwd = $stmt->bind_result($encrypted_password)->fetch();
if (checkhashSSHA($dbpwd, $password) {
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
return $user;
} else {
return NULL;
}
}'
这是我的解密功能
public function checkhashSSHA($dbString, $password) {
$pieces = explode("$", $dbString);
$iterations = $pieces[1];
$salt = $pieces[2];
$old_hash = $pieces[3];
$hash = hash_pbkdf2("SHA256", $password, $salt, $iterations, 0, true);
$hash = base64_encode($hash);
if ($hash == $old_hash) {
// login ok.
return true;
}
else {
//login fail
return false;
}
}
参考这个我正在使用的加密功能
public function hashSSHA($password) {
$algorithm = "pbkdf2_sha256";
$iterations = 10000;
$newSalt = mcrypt_create_iv(6, MCRYPT_DEV_URANDOM);
$newSalt = base64_encode($newSalt);
$hash = hash_pbkdf2("SHA256", $password, $newSalt, $iterations, 0, true);
$toDBStr = $algorithm ."$". $iterations ."$". $newSalt ."$". base64_encode($hash);
// This string is to be saved into DB, just like what Django generate.
return $toDBStr;
}
我对准备陈述有点困惑。我想知道的是如何检索存储在数据库中的加密密码?这样我就可以将它作为参数传递给我的chechhashSSHA函数。