使用散列密码时,我无法从数据库中撤回数据。我使用hash_hmac / sha256如下:
function get_password_hash($password){
return hash_hmac('sha256',$password,'xxxxxxx',false);
}
$p
是一个非散列密码;这个存储在我的数据库中,以下工作完美:
$loginQuery = $dbc->prepare("SELECT id, username FROM users WHERE (email=? AND pass=?)");
$loginQuery->bind_param('ss',$e,$p);
$loginQuery->execute();
$loginQuery->bind_result($id,$username);
while($loginQuery->fetch()){
$_SESSION['user_id'] = $id;
$_SESSION['username'] = $username;
}
如果我更新我的数据库以保留哈希密码,并将上述更新如下,则SQL语句不会从我的数据库中返回任何内容。
$pas = get_password_hash($p);
$loginQuery = $dbc->prepare("SELECT id, username FROM users WHERE (email=? AND pass=?)");
$loginQuery->bind_param('ss',$e,$pas);
$loginQuery->execute();
$loginQuery->bind_result($id,$username);
while($loginQuery->fetch()){
$_SESSION['user_id'] = $id;
$_SESSION['username'] = $username;
}
我理解这是因为数据库记录在varbinary字段中保存了哈希密码,但在我的SQL查询中,我使用的是字符串。
我可以在预准备语句中使用的参数类型选项是String,Blob,Double和Integer;哪些与我的DB中的varbinary字段有关?
我看到一篇类似的帖子建议使用pack()
将字符串转换为二进制文件进行修复;这怎么会在这里工作?