Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用blowfish存储密码_Php_Mysql_Hash_Passwords_Blowfish - Fatal编程技术网

在PHP中使用blowfish存储密码

在PHP中使用blowfish存储密码,php,mysql,hash,passwords,blowfish,Php,Mysql,Hash,Passwords,Blowfish,这整个密码学的事情是很难接受的,但它真的很有趣,我最近一直在读它 我的问题是关于使用河豚来散列存储密码。我知道需要盐,但我不确定该怎么做。我有一些问题 我读过很多教程,人们似乎只是随机地想出了一个像“oidsjf03”这样的教程,并将其用于他们所有的盐。他们只是把键盘弄碎了还是怎么了 我也读过很多书,说每个密码都应该有一个唯一的散列。因此,我为存储的每个密码生成一个单独的salt。那我就得把它放在某个地方。然而,在哪里?如果我只是把它作为一个条目存储在用户的行中,如果数据库被破坏,他们能不能用这

这整个密码学的事情是很难接受的,但它真的很有趣,我最近一直在读它

我的问题是关于使用河豚来散列存储密码。我知道需要盐,但我不确定该怎么做。我有一些问题

  • 我读过很多教程,人们似乎只是随机地想出了一个像“oidsjf03”这样的教程,并将其用于他们所有的盐。他们只是把键盘弄碎了还是怎么了

  • 我也读过很多书,说每个密码都应该有一个唯一的散列。因此,我为存储的每个密码生成一个单独的salt。那我就得把它放在某个地方。然而,在哪里?如果我只是把它作为一个条目存储在用户的行中,如果数据库被破坏,他们能不能用这个salt生成rainbow表

    我说这是不可行的,因为他们需要为每个密码生成一个彩虹表,而河豚创建每个哈希需要一段时间,所以这是不实际的

  • 为什么每个用户都有一个唯一的一个如此重要?假设你使用的是河豚,你的数据库被破坏了,你的盐也被捕获了。黑客可以创建一个rainbow表来测试你的密码,但是如果在哈希上进行大量的循环,那么每个密码可能需要0.1秒。如果他们想创建一个包含10亿个条目的彩虹表,创建它需要1亿秒(或者大约3年)

    如果你使用独特的盐,并有1000个密码,他们就必须创建1000个彩虹表,将时间增加到3000年。这是为什么?每个存储的密码的时间增加了多少

  • 你是如何为哈希生成盐的?PHP的
    uniqid()
    功能足够了吗?还是我应该做一些有趣的事情

  • 我真的需要创建一个完整的类等等,还是可以创建一个简单的函数

  • 最后,我听说phpass在安全性方面提到了很多,用户应该如何使用它,而不是自己潜在地犯错误。这真的是推荐的做法吗

  • 1-我读过很多教程,人们似乎只是随机地想出了一个像“oidsjf03”这样的教程,并将其用于他们所有的盐。他们只是把键盘弄碎了还是怎么了

    什么都用同样的盐是个坏主意。句号

    2-我也读过很多关于每个密码都应该有一个唯一的散列的文章。因此,我为存储的每个密码生成一个单独的salt。那我就得把它放在某个地方。然而,在哪里?如果我只是把它作为一个条目存储在用户的行中,如果数据库被破坏,他们能不能用这个salt生成rainbow表

    盐是杂烩的一部分。彩虹表仅在多个用户使用同一种盐时才起作用。但它们都是独一无二的,对吗?所以用散列存储它是可以的。第三条也是如此

    4-你如何为哈希生成盐?PHP的
    uniqid()
    功能足够了吗?还是我应该做一些有趣的事情

    从PHP5.5开始,已直接构建到PHP中。同时,请参见上述链接,注释中有一个指向Github项目的链接,该项目与这些函数向前兼容,可用于PHP>=5.3.7

    6-最后,我听说phpass提到了很多关于它的安全性的问题,以及用户应该如何使用它,而不是自己潜在地犯错误。这真的是推荐的做法吗

    内置PHP函数更好,因为一旦发现任何安全漏洞,它们将始终保持最新状态。我会用它们来代替。然而,phpass是一个非常好的选择

    1-我读过很多教程,人们似乎只是随机地想出了一个像“oidsjf03”这样的教程,并将其用于他们所有的盐。他们只是把键盘弄碎了还是怎么了

    什么都用同样的盐是个坏主意。句号

    2-我也读过很多关于每个密码都应该有一个唯一的散列的文章。因此,我为存储的每个密码生成一个单独的salt。那我就得把它放在某个地方。然而,在哪里?如果我只是把它作为一个条目存储在用户的行中,如果数据库被破坏,他们能不能用这个salt生成rainbow表

    盐是杂烩的一部分。彩虹表仅在多个用户使用同一种盐时才起作用。但它们都是独一无二的,对吗?所以用散列存储它是可以的。第三条也是如此

    4-你如何为哈希生成盐?PHP的
    uniqid()
    功能足够了吗?还是我应该做一些有趣的事情

    从PHP5.5开始,已直接构建到PHP中。同时,请参见上述链接,注释中有一个指向Github项目的链接,该项目与这些函数向前兼容,可用于PHP>=5.3.7

    6-最后,我听说phpass提到了很多关于它的安全性的问题,以及用户应该如何使用它,而不是自己潜在地犯错误。这真的是推荐的做法吗


    内置PHP函数更好,因为一旦发现任何安全漏洞,它们将始终保持最新状态。我会用它们来代替。但是phpass是一个很好的选择。

    除了上面的答案,您还可以在DB BR中使用哈希保存salt,因为如果您的DB被破坏,攻击者需要知道您的salt算法。如hash($pass.$salt)或hash($pass.$salt)等。

    除上述答案外,您还可以将salt与hash一起保存在DB br中,因为如果您的DB遭到破坏,攻击者需要了解您的salt算法。像hash($pass.$salt)或hash(hash($pass.$salt)等。

    Re:#3,salt应该每个用户分开的原因是,如果多个用户使用相同的密码(“secret1”),他们就不会有相同的hash-攻击者无法判断他们都在使用相同的密码,他们必须分别破解每个用户。关于:#6,是的。这是一个基本的安全规则,你更好