Password_hash 奇怪地没有工作

Password_hash is not working Strangely

这总是有效的

public function hash($password)
    {   
        $password1 = "123456";
        return password_hash($password1,PASSWORD_BCRYPT); 
    }

这永远行不通

 public function hash($password)
    {    
        return password_hash($password,PASSWORD_BCRYPT); 
    }

哪位大神能指点一下问题出在哪里? Password_verify 首先验证而不是其次我已经在 $password 上完成了 var_dump 并且每件事 returns 都很好。

记住 hash($var1,$var2) 是一个 php 函数 (http://php.net/manual/en/function.hash.php)。如果您编写一个具有相同名称的函数,您将得到以下错误。

Fatal error: Cannot redeclare hash()

使用不同的名称,例如

public function hash_new($password)
{    
    return password_hash($password,PASSWORD_BCRYPT); 
}

hash() 是一个 PHP 函数,因此您不应将其用作自定义函数的名称。尝试使用其他名称。

此外,与以前的版本

相比,PASSWORD_BCRYPT 的散列在 PHP 7.0+ 中有不同的行为

在旧版本中: PASSWORD_BCRYPT 有一个可选的 salt 参数。您可以始终使用相同的盐,因此散列相同的字符串每次都会呈现完全相同的结果。 如果您省略了 salt 参数,您将得到一个随机盐,并且同一字符串的每次散列都会产生不同的输出。

在 PHP 7.0+ 中,salt 参数被删除,因此您将始终获得随机盐,因此每次都有不同的输出。

这里的问题是 cakePHP 在 $this->Users->save() 中两次调用散列函数。所以 $password 被重新散列然后存储,而 $password1="1234567" 在重新散列时始终保持不变。

真的很抱歉打扰了大家。感谢@Rinsad 和@Javier 尝试这样的问题并给我宝贵的时间。