使用散列来安全地存储用户密码

时间:2010-01-25 14:27:06

标签: php passwords

  

在提出问题之前,请尝试搜索StackOverflow。许多问题已经得到解答。例如:

     

您好

我希望即使在数据库中也没有人能看到我的密码..

所以我使用了像这样的哈希函数

$passowrd_hash=hash('shal',$_POST['password']);

现在我可以轻松地将此password_hash值存储到数据库中。它会像加密形式一样。

现在用户知道其原始密码,他不知道这个加密密码。

现在如果他尝试登录这个原始密码......他无法登录。

有没有任何方法可以解密,用户可以登录。所以他既可以实现密码安全,又可以重新登录。

怎么做?

6 个答案:

答案 0 :(得分:13)

您需要哈希用户输入密码并比较哈希值。

答案 1 :(得分:1)

您需要做的就是加密您输入的密码并比较两者;数据库中的哈希值和刚刚加密的哈希值。如果匹配则输入的密码是正确的。我假设您使用的是像SHA1这样的算法。

答案 2 :(得分:1)

在将用户发布的密码与数据库中的密码进行比较之前,请使用与存储密码相同的方式加密发布的密码。

答案 3 :(得分:1)

你不需要解密它。您无法将哈希转换回纯文本,它是单向函数。所以,基本上你对输入密码进行散列并比较两个散列:

E.g (pseudo code):-

if hash(password entered by user) == password stored in databse Then
    //logged in successfully
else
    //login failed
end if

答案 4 :(得分:1)

如前所述,您需要在每次重新输入密码时对密码进行哈希处理,并将哈希值与数据库中的哈希值进行比较。

您还应该考虑在哈希算法中使用salt。这个问题有很多讨论:

Secure hash and salt for PHP passwords

答案 5 :(得分:0)

我强烈建议使用md5()http://php.net/manual/en/function.md5.php

当用户注册时,您存储:

$password = md5($_POST['password']);

当用户登录时,请检查:

if($_POST['password_entered'] == $passwordFromDB) :
    // Log user in
else :
    // Show error to user
endif;