将哈希密码绑定到SQL准备语句

时间:2014-05-14 17:28:01

标签: php prepared-statement sha256 varbinary

使用散列密码时,我无法从数据库中撤回数据。我使用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()将字符串转换为二进制文件进行修复;这怎么会在这里工作?

0 个答案:

没有答案