从数据库中检索后,不匹配password_hash和password_verify

时间:2017-11-26 22:39:04

标签: php mysqli

在研究了上述有关上述主题的六个问题之后,我仍无法匹配密码,与password_hash一起插入表格并由password_verify检索/验证。

如果我在普通文件中使用密码功能检查密码,而不与mysqli交互,则加密和解密工作非常正常。

我表中的密码字段是VARCHAR(255)。这是遵循先前问题中提出的建议。

我使用password_hash函数的方式:

public function fSetEncPass( $password ){

                    $pw = password_hash( $password, PASSWORD_BCRYPT );
                    return $pw;

}//end f

我也试过PASSWORD_DEFAULT

这是我尝试检索密码的方式:

$sql = sprintf( 'select password from table where email ="%s"', mysqli_real_escape_string( $myConnect::$cn, $email ) );
                        $result = mysqli_query( $myConnect::$cn, $sql );
                        $row = mysqli_fetch_row( $result );
                        if ( password_verify( $password, $row[0] ) ) {

                                return TRUE;

                        }else{
                                //var_dump(password_verify( $password, $row[0] ));
                                return FALSE;

                        }//end if

$ row [0]包含使用password_hash创建的哈希。

我确保用单引号将用户输入存储在变量中。我从之前的问题中了解到,用双引号捕获用户输入可能会导致变量扩展。

此外我注意到,回显$ row [0]与我表中存储的值完全对应。 我的结论是password_verify应该已经返回TRUE而不是FALSE。但它不是......

var_dump(password_verify( $password, $row[0] ));显示:bool(false)

我在error_reporting上增加了详细级别以显示所有错误:

ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);

不幸的是,没有显示任何错误。

我想我做错了,但到底是什么?

0 个答案:

没有答案