【问题标题】:Using hashing to safely store user passwords使用散列安全存储用户密码
【发布时间】:2010-01-25 14:27:06
【问题描述】:

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

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

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

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

现在我可以轻松地将这个 password_hash 值存储到数据库中。它将类似于加密形式。

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

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

那么有什么方法可以解密,让用户可以登录,这样既可以保证密码的安全,又可以再次登录。

如何做到这一点?

【问题讨论】:

  • 当您喜欢其中一个答案时,请将其标记为已接受
  • 在这里经常提问和回答。 C.
  • tanascius,您的链接已损坏。
  • 谢谢,编辑了建议并在此处添加了链接...

标签: php passwords


【解决方案1】:

您需要对用户输入的密码进行哈希处理并比较哈希值。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 至少,很有可能
      【解决方案4】:

      正如已经回答的那样,您每次重新输入密码时都需要对密码进行哈希处理,并将哈希值与数据库中的内容进行比较。

      您还应该考虑在散列算法中使用盐。这个问题有很多讨论:

      Secure hash and salt for PHP passwords

      【讨论】:

        【解决方案5】:

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

        E.g (pseudo code):-
        
        if hash(password entered by user) == password stored in databse Then
            //logged in successfully
        else
            //login failed
        end if
        

        【讨论】:

        • if 语句的后半部分应该是hashed password stored in the db。当然,将未加密的密码存储在任何地方都是不安全的。
        【解决方案6】:

        我强烈推荐使用 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;
        

        【讨论】:

        • 我认为使用 sha1() 会更安全?
        • MD5 已损坏,不应用于加密目的
        猜你喜欢
        • 2011-01-20
        • 2010-12-06
        • 2013-09-03
        • 1970-01-01
        • 2011-12-29
        • 1970-01-01
        • 2013-07-25
        • 2010-12-07
        • 2010-12-22
        相关资源
        最近更新 更多