在研究了上述有关上述主题的六个问题之后,我仍无法匹配密码,与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);
不幸的是,没有显示任何错误。
我想我做错了,但到底是什么?