【问题标题】:Protect password field in a database [duplicate]保护数据库中的密码字段[重复]
【发布时间】:2011-08-14 21:43:45
【问题描述】:

可能重复:
Best way to store password in database

我有一个数据库 (mySQL),其中表 USERS 具有以下结构:

  • 用户 ID (varchar)
  • 密码(varchar)
  • 名称(varchar)
  • BancAccount (varchar)

Passwd 和 BancAccount 是数据库中的纯文本。在 PHP 代码中,当登录完成后,它会将 UserID 和 Passwd 的用户输入与数据库中的结果进行比较。

我想让它更安全,这样如果有人能够闯入数据库,他就看不到这两个关键字段。有什么建议吗?

谢谢

【问题讨论】:

    标签: php mysql password-protection


    【解决方案1】:

    尝试使用 PHP crypt 函数并使用数据库来存储盐,跟进尼尔所说的,确保你也尝试使用一些模糊来隐藏它......但你需要用于稍后比较用户输入的盐。

    PHP Crypt()

    【讨论】:

      【解决方案2】:

      你可以用盐来散列密码。并有一个完全独立的银行账户表,该表以某种方式链接到该表,但非常模糊。

      【讨论】:

      • 散列很好。默默无闻的安全性就不那么重要了。我会忽略这个答案的第二部分。
      【解决方案3】:

      您绝对不应该将密码存储为纯密码,而只能存储它的哈希值,最多为salted hash

      您使用哪种哈希函数以及如何选择盐也是一个重要问题。 Many people suggest to use bcrypt as the hash function for passwords 有一个成本参数来调整生成哈希值的计算成本(暴力攻击持续时间越长,成本越高)。并且盐应该是一个随机值并且对于每个密码都是唯一的。

      【讨论】:

        【解决方案4】:

        我建议将包含密码的连接字符串放在一起;还调用了“Salt and Pepper”密码,然后使用 SHA1 对其进行加密。然后在检查数据库字段时使用相同的算法。

        $salt = "a7s8as98sa9";
        $pepper = date("H");
        
        $hash = sha1($salt . $password . $pepper);
        

        使用随机生成的字符串、数字、日期或时间戳等动态盐只是创意的冰山一角。

        【讨论】:

        • 我能问一下这个盐和胡椒的概念是从哪里来的吗?直到现在我以前从未听说过或见过它(可以说我已经对这个主题进行了相当多的研究)。您能否指出有关该主题的任何权威来源?
        猜你喜欢
        • 2011-08-23
        • 1970-01-01
        • 2013-12-20
        • 1970-01-01
        • 2014-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多