【问题标题】:PHP.net says that md5() and sha1() unsuitable for password?PHP.net 说 md5() 和 sha1() 不适合密码?
【发布时间】:2011-12-27 22:53:27
【问题描述】:

http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

我将用户密码以哈希形式存储在 MySQL 数据库中。这是否意味着这样做不安全?如果是,我的替代方案是什么?

【问题讨论】:

  • 您需要在存储密码之前对密码进行加盐和哈希处理。这个网站上有很多与此相关的问题。
  • 就像河马说的,因为它是无盐的。如果您使用 crypt,它将使用您选择的其中一种算法,但它也会对密码进行加盐。

标签: php mysql hash passwords md5


【解决方案1】:

之前已经回答过很多次了。您可以使用 SHA-256 http://php.net/manual/en/function.hash.php 之类的东西,但您还应该在散列密码之前对密码加盐,并且您可以迭代地散列密码 - 因此在不太可能的情况下它被破解它只会显示另一个散列(换句话说,破解密码需要更长的时间)。

【讨论】:

    【解决方案2】:

    您链接到的常见问题解答中的下一个问题讨论了它:How should I hash my passwords, if the common hash functions are not suitable?

    来自常见问题解答:

    建议在对密码进行哈希处理时使用 Blowfish 算法,因为它的计算成本明显高于 MD5 或 SHA1,但仍具有可扩展性。

    接下来的问题是关于盐的。

    【讨论】:

      【解决方案3】:

      阅读链接的下一部分:如果常用散列函数不适用,我应该如何散列我的密码?

      【讨论】:

        【解决方案4】:

        根据您链接到的页面的建议,将 PHP crypt() 函数与 Blowfish 算法结合使用。此外,每次调用crypt() 时使用不同的盐。您可以将盐值与密码存储在同一个数据库表中,以便以后比较密码时可以使用它。

        要使用 Blowfish 算法调用 crypt(),请使用以 $2a$ 开头的盐,后跟 04 到 31 之间的数字(“成本参数”),然后是 $,然后是 22 位数字来自字母表./0-9A-Za-z

        PHP: crypt manual 包含有关如何使用crypt() 的更多详细信息

        【讨论】:

          【解决方案5】:

          举一个具体的例子,说明为什么使用普通的、未加盐的 MD5 进行密码散列是一个坏主意,请尝试将一些相当常见的密码的 MD5 散列输入到像 md5decrypter.co.ukmd5hashcracker.appspot.commd5this.com 这样的网站。或者直接进入Googleindexes most of those sites(以及许多其他人)。

          【讨论】:

            猜你喜欢
            • 2021-07-03
            • 2013-04-24
            • 2013-06-17
            • 2011-08-11
            • 2023-03-27
            • 1970-01-01
            • 1970-01-01
            • 2016-03-14
            • 2011-03-03
            相关资源
            最近更新 更多