哪一种是PHP最好的密码哈希算法?

哪一种是PHP最好的密码哈希算法?,php,security,hash,Php,Security,Hash,我刚刚读了一篇关于创建登录系统的文章,在读的时候我看到了密码散列 我们将存储一个sha256哈希,它始终是一个字符串 包含64个字符 本文介绍如何使用sha256哈希函数。读完这篇文章后,我并没有停下脚步,而是开始搜索有关创建安全登录系统的更多信息,然后我通过以下方式提出了这篇文章。在本文中,他们使用的是sha512散列函数。这让我很困惑,下一个登录系统将使用哪个函数。我仍然在谷歌上搜索更好的文章,找到了这篇文章。作者推荐sha256和SH512 只能使用加密哈希函数来实现密码 散列。散列函数如

我刚刚读了一篇关于创建登录系统的文章,在读的时候我看到了密码散列

我们将存储一个sha256哈希,它始终是一个字符串 包含64个字符

本文介绍如何使用sha256哈希函数。读完这篇文章后,我并没有停下脚步,而是开始搜索有关创建安全登录系统的更多信息,然后我通过以下方式提出了这篇文章。在本文中,他们使用的是sha512散列函数。这让我很困惑,下一个登录系统将使用哪个函数。我仍然在谷歌上搜索更好的文章,找到了这篇文章。作者推荐sha256和SH512

只能使用加密哈希函数来实现密码 散列。散列函数如SHA256、SHA512、RipeMD和WHIRLPOOL是 加密散列函数

我以为我的搜索结束了,我可以使用
sha256
sha512
功能,但在搜索更多内容时,我发现了这一点。被接受的答案给了我新的东西。我以前从未听说过的事情是bcryptscrypt

所有这些东西都是2到4年前写的

问题


目前PHP使用的最佳密码哈希算法是什么?

这里的主要问题是,您希望选择一种速度较慢的哈希算法。这些散列的唯一可行攻击向量是蛮力。这意味着,攻击者只能一个接一个地尝试所有可能的密码,使用与您相同的算法对它们进行散列,并将它们与散列进行比较。一个密码花费的时间越长,就越不可能找到匹配的密码

SHA系列算法的设计目的是快速,因为它们不是为实现这一目的而设计的。因此,它们本身不太适合密码散列;尽管它们可以作为算法的一部分使用,从而使它们更合适,例如(简而言之,它会将散列重复数千次以扩展散列)


bcrypt和scrypt被明确设计为较慢,因此更适合于密码散列。bcrypt在CPU功耗方面设计得非常昂贵,而scrypt在内存消耗方面设计得非常昂贵。使用当今的硬件,CPU的能力比内存的可扩展性更好,因此scrypt目前被认为是最好的使用方式。尽管它目前非常先进,在可用代码方面几乎没有得到支持。另一方面,PHP直接使用支持bcrypt。

我认为使用多个变量。例如:
sha1($username.-'.$password)@userNOID:这还不够。你也应该阅读链接问题。另请参阅Openwall的(PHPass)。它可以抵御许多常见的用户密码攻击。当有一个完美的规范精确副本时,为什么要回答这个问题?为什么不呢?这个问题是关于SHA*和*crypt之间的区别的,所以对这个问题的简洁回答还不错,不是吗?他的问题是:“现在PHP使用的最好的密码哈希算法是什么?”,这在副本中得到了完美的回答。这里没有任何关于SHA和crypt之间区别的问题……好吧,是的,另一个答案很好。虽然它相当长,但我仍然认为简明、简单的答案很有价值,特别是关于算法之间的区别以及为什么有些算法优于其他算法。@deceze好的,你有一个很好的解释,但是你有一篇关于
bcrypt
scrypt
的好文章可以阅读吗?