如果我使用哈希函数,我如何匹配新旧密码?

时间:2012-12-23 23:28:15

标签: php security password-encryption

我将用户密码作为纯文本存储在数据库中。因此,更改密码很容易。我使用这段代码,

while($row = mysql_fetch_array($result)) {
  if($row['Password']==$opass)
    mysql_query(
      "UPDATE information SET Password='$pass' WHERE Username='$name'"
    );
}

首先,我检查用户是否正确输入了旧密码($opass),然后我允许他将其更改为新密码($pass)。我想我可以检查旧密码,因为我将其存储为纯文本。但是,如果我使用任何哈希算法,这个if($row['Password']==$opass)代码怎么能运行?我认为$opass$row['Password']不会相同。

1 个答案:

答案 0 :(得分:4)

使用等效的散列函数对用户输入的密码进行散列,并将其与您在数据库中存储的密码进行比较。

while($row = mysql_fetch_array($result)){
 if($row['Password']==yourOneWayPasswordHashingFunction($opass))
  mysql_query("UPDATE information SET Password='$pass' WHERE Username='$name'");}

正如我在评论中提到的,使用bcrypt。密码可能很难,所以使用它,然后去购物,及时为圣诞节:)

也...

  

我将用户密码作为纯文本存储在数据库中。 因此可以轻松更改密码

强调我的。

您永远不应该存储纯文本密码,并且它很容易更改不是正确的理由。然而,荣幸认识到需要对此采取行动。