2016-04-10 63 views
0

当用户注册并登录时,我使用相同的password_hash函数来对明文密码进行哈希处理。注册并登录时,PHP密码哈希值不一样

password_hash($password, PASSWORD_DEFAULT)

但密码是不一样的。

我可以证明这另一种方式,只需注册两个用户使用相同的密码。

例如 “管理员” 变成 “$ 2Y $ 10 $ SyqILazLbo4jJVYvxYfwW.WgHUnSi.cRMETWoMjZXwMNa4H4tYELK”

上一个用户,和 “$ 2Y $ 10 $ gXfVz6oH4afxAL.7ytFJseZV3VERxbSYXqN7FYsRzH4IrjJw9uyO6” 在另一个上。这意味着password_hash将永远不会相同,因此用户无法登录。

我在做什么错?

+2

这是正常的,因为该功能将每次产生不同的哈希值。现在你为什么要说什么似乎是他们*永远不会*登录? –

+0

要登录,用户提供他们的用户名和密码。密码必须在数据库中进行散列处理,所以.. username must = username。密码必须=密码。如果每次散列值不同,密码将如何相等? – user3822370

+1

这就是函数的工作原理,所以不要担心。 –

回答

3

documentation您需要使用password_verify验证密码是否正确与否的例子。事情是这样的

<?php 

$password = "rasmuslerdorf"; 

$hash = password_hash($password, PASSWORD_DEFAULT); 

if (password_verify($password, $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 

?> 

reference page

1

您需要使用函数password_verify($user_submitted_password, $hash_in_db)来检查结果。 password_hash()在每次哈希中嵌入一个随机盐,这就是为什么键是不同的,但它会验证正确。

password_verify()

<?php 
// See the password_hash() example to see where this came from. 
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq'; 

if (password_verify('rasmuslerdorf', $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 
?>