PHP准备语句登录

时间:2016-01-13 23:49:01

标签: php encryption mysqli prepared-statement

我正在尝试为登录系统使用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函数。

0 个答案:

没有答案