php密码函数不工作

php密码函数不工作,php,mysql,passwords,Php,Mysql,Passwords,在我的网站上,有机会创建用户并登录。我想使用PHP的新密码函数password\u hash和password\u verify,以提高安全性。在我自己的计算机中,我使用了PHP5.5,因此函数运行良好。然而,在我的webhotel中,有一个版本为5.2的PHP,所以我必须从下载密码函数。现在这些函数不起作用了。看起来像是password\u hash没有返回任何内容,因为注册后数据库中没有任何内容 我已经检查了错误日志,它在中没有关于此的内容。是的,我在E|u ALL | E|u STRICT

在我的网站上,有机会创建用户并登录。我想使用PHP的新密码函数
password\u hash
password\u verify
,以提高安全性。在我自己的计算机中,我使用了PHP5.5,因此函数运行良好。然而,在我的webhotel中,有一个版本为5.2的PHP,所以我必须从下载密码函数。现在这些函数不起作用了。看起来像是
password\u hash
没有返回任何内容,因为注册后数据库中没有任何内容

我已经检查了错误日志,它在中没有关于此的内容。是的,我在
E|u ALL | E|u STRICT
上有
错误报告
记录错误
,我正在查看正确的文件

我重复一遍:函数在我的计算机中的硬编码(PHP5.5)不会出现任何问题,但在下载(PHP5.2)时不会出现任何问题

我的代码:

// model:
public function getUser($email, $pass) {
    $this->search("SELECT * FROM users WHERE email = ?", array($email));
    if($this->countRows() <= 0) {
        return false;
    }
    $row = $this->fetchRow();
    if(!password_verify($pass, $row["password"])) {
        return false;
    }
    if(password_needs_rehash($row["password"], PASSWORD_DEFAULT)) {
        $this->run("UPDATE users SET password = ? WHERE id = ?",array(password_hash($pass,PASSWORD_DEFAULT),$row["id"]));
    }
    return $row;
}

public function userExists($email) {
    $this->search("SELECT * FROM users WHERE email = ?", array($email));
    if($this->countRows() <= 0) {
        return false;
    }
    return true;
}

// sign up
public function reg() {
    if($this->model->userExists($_POST["email"])) {
        header("Location: " . PUBLICROOT . "/index/index/error/emailAlreadyExists");
        die();
    }
    $this->model->run("INSERT INTO users (firstname, lastname, email, password, birthday) VALUES (?,?,?,?,?)", 
            array($_POST["firstname"],$_POST["lastname"],$_POST["email"],
                password_hash($_POST["password"],PASSWORD_DEFAULT),$_POST["birthday"]."-".$_POST["birthmonth"]."-".$_POST["birthyear"]));
    $this->in();
}

// sign in
public function in() {
    $u = $this->model->getUser($_POST["email"],$_POST["password"]);
    if($u === false) {
        header("Location: " . PUBLICROOT . "/index/index/error/signInFailed");
        die();
    } else {
        $_SESSION["userid"] = $u["id"];
        $_SESSION["email"] = $_POST["email"];
        $_SESSION["firstname"] = $u["firstname"];
        $_SESSION["lastname"] = $u["lastname"];
        $_SESSION["time"] = time();
        header("Location: " . PUBLICROOT . "/home/index");
        die();
    }
}
//模型:
公共函数getUser($email,$pass){
$this->search(“从电子邮件=?”的用户中选择*”,数组($email));
如果($this->countRows()fetchRow();
如果(!password\u verify($pass,$row[“password”])){
返回false;
}
if(密码需要重新设置($row[“password”],密码默认值)){
$this->run(“更新用户设置密码=?其中id=?”,数组(密码\u散列($pass,密码\u DEFAULT),$row[“id]”);
}
返回$row;
}
公用函数userExists($email){
$this->search(“从电子邮件=?”的用户中选择*”,数组($email));
如果($this->countRows()model->userExists($\u POST[“email”])){
标题(“位置:“.PUBLICROOT.”/index/index/error/emailAlreadyExists”);
模具();
}
$this->model->run(“插入到用户(firstname、lastname、email、密码、生日)值(?、、?、?、?)”,
数组($\u POST[“firstname”],$\u POST[“lastname”],$\u POST[“email”],
密码散列($\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
$this->in();
}
//登录
公共职能{
$u=$this->model->getUser($\u POST[“email”],$\u POST[“password”]);
如果($u==false){
标题(“位置:.PUBLICROOT./index/index/error/signInFailed”);
模具();
}否则{
$_会话[“userid”]=$u[“id”];
$_SESSION[“email”]=$_POST[“email”];
$_SESSION[“firstname”]=$u[“firstname”];
$\会话[“lastname”]=$u[“lastname”];
$\会话[“时间”]=time();
标题(“位置:.PUBLICROOT./home/index”);
模具();
}
}
有什么想法吗?

可能想

此库需要PHP>=5.3.7或具有$2y修复程序后端口的版本(如RedHat提供的)

  • PHP5.5提供了使用BCrypt算法的函数
  • 使用PHP5.3.7,您可以使用
  • 由于PHP5.3,可以使用BCrypt(算法“2a”而不是“2y”)
  • 早期的PHP版本不支持BCrypt,您最好的选择可能是库,尽管它们也有一个不太安全的算法。也许您可以找到一个扩展,可以在您的服务器上安装BCrypt支持

此库需要PHP>=5.3.7或具有$2y修复程序后端口的版本(如RedHat提供的)这个库不支持.5.2。该死的,我没有看到。有什么建议吗?我不想使用md5。
password\u hash
只是一个包装器,所有版本的PHP5都可以使用它……但需要注意的是,5.3.7之前的PHP版本在密码中包含一个bug,它会大大削弱用它散列的密码,这就是为什么存在版本限制。使用是您自己的风险,@user3725053。