【问题标题】:PHP best way to salt a password in our timePHP 在我们这个时代加盐密码的最佳方法
【发布时间】:2012-06-22 12:25:12
【问题描述】:

如何为每个用户制作绝对原创的盐? 在PHP中使用time()函数会更好吗?

【问题讨论】:

    标签: php hash salt saltedhash


    【解决方案1】:

    在许多情况下,一个简单的uniqid(mt_rand(), true) 就可以生成随机盐。结合 Blowfish 应该会给你一个很好的密码哈希。

    替代项是伪随机源,例如 /dev/urandomopenssl_pseudo_random_bytes()。还有一些服务会为您生成随机数据(基于放射性退化)。

    【讨论】:

    • 我认为是来自link的openssl_random_pseudo_bytes ()
    【解决方案2】:

    使用这一行在php中生成强盐

     $salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
    

    【讨论】:

      【解决方案3】:

      考虑使用 random salt 而不是 non-random。也许你会在这篇文章中找到有用的东西http://www.gregboggs.com/php-blowfish-random-salted-passwords/

      也可以看看这篇文章http://codahale.com/how-to-safely-store-a-password/

      一种方法是为每个用户生成一个唯一的盐并将该盐也存储在数据库中。

      另一个好方法是算法,它生成密码哈希值必须超过秒计算盐分。您的哈希算法越复杂 - 想要破解您的数据库的人面临的问题就越多

      【讨论】:

      • 我不明白您所说的“必须计算盐分超过秒”是什么意思。你的意思是它应该需要超过一秒钟的时间来执行?请详细说明。
      • @nullability 是的,执行时间超过一秒
      【解决方案4】:

      您可以在 PHP 中使用 microtime() 函数生成基于微秒而不是秒的数字,这使得用户几乎不可能与另一个用户拥有相同的盐分。您也可以将此数字与用户 ID 相乘。

      也许md5(uniqid()) 足以为您的应用添加盐。

      编辑:忘记在 uniqid() 函数中提及 more_entropy 参数。即使函数在同一微秒内运行两次,它也会减少相同字符串的机会,因此编辑后的函数应如下所示:

      $salt = md5(uniqid($user_id, TRUE));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-15
        • 2020-11-30
        • 2010-11-26
        • 2014-05-03
        • 2010-11-20
        • 2011-03-03
        • 2011-05-20
        • 1970-01-01
        相关资源
        最近更新 更多