无法获得PHP密码_hash api

时间:2014-11-08 05:23:34

标签: php security hash

所以我将字符串“test”

$hash = password_hash("test", PASSWORD_DEFAULT);

将其保存在我的密码字段(varchar 255)

然后我做了一个简单的测试登录页面

if (!empty($_POST['username']) && !empty($_POST['password']))
{

$username = trim($_POST['username']);
$password = trim($_POST['password']);

$stmt = $db->prepare("SELECT username, password FROM users WHERE username = ? AND password = ?");
$stmt->execute(array($username, $password));
$row = $stmt->fetch();
$hash = $row['password'];

if (password_verify($password, $hash)) {
//success
} else {
 //wrong credentials
}

然后我输入我的用户名和密码test,但是当它应该返回true时返回false(但显然我错了,因为它没有,我在这里遗漏了一些东西)

我在这里做错了什么?

已经阅读了很多但我无法弄清楚为什么它不会返回真实。请注意,我是新手。

另外,为什么盐,我猜,前六个字符,从哈希开始总是一样的? $2y$10。那不好。

1 个答案:

答案 0 :(得分:-1)

我的猜测是你将散列密码存储在数据库中。

在where子句中,您需要传递散列密码,而不是纯文本

$stmt->execute(array($username, password_hash($password)));

在if语句中,确保两者都是哈希