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

时间:2013-08-31 12:07:11

标签: php security hash

我刚刚阅读post来创建一个登录系统,在阅读时我看到了密码哈希。

  

我们将存储一个始终为字符串的sha256哈希值   包含64个字符。

本文正在教授使用 sha256 哈希函数。阅读本文之后,我没有停下来开始搜索更多关于创建安全登录系统的信息,然后我在wikiHow提出了这篇文章。在本文中,他们使用 sha512 哈希函数。这真的让我感到困惑,我将在下一个登录系统中使用哪个功能。我仍在谷歌搜索更好的文章,并在crackstation找到了这篇文章。作者推荐使用sha256和sha512。

  

只有加密哈希函数可用于实现密码   散列。哈希函数如SHA256,SHA512,RipeMD和WHIRLPOOL都是   加密哈希函数。

我认为我的搜索结束了,我可以使用sha256sha512功能,但在搜索更多时,我发现了SO QuestionRobert K接受的答案对我来说有新的东西。以前我从未听说过的事情是 bcrypt scrypt

所有这些东西都写在大约2到4年前。

问题

目前PHP使用的最佳密码哈希算法是哪一种?

1 个答案:

答案 0 :(得分:4)

这里最重要的是你要选择一个的哈希。任何这些哈希值唯一可行的攻击向量是暴力强迫。这意味着,攻击者只能一个接一个地尝试所有可能的密码,使用与您相同的算法对它们进行散列,并将它们与散列进行比较。一个密码需要的时间越长,找到匹配就越不可行。

SHA系列算法设计得很快,因为它们不是为了这个目的而设计的。因此,它们本身有点不适合密码散列;虽然它们可以作为使它们适合的算法的一部分,例如PBKDF2(简而言之,重复散列数千次,以拉伸)。

bcrypt和scrypt明确设计为慢,因此更适合密码散列。 bcrypt的设计在CPU功率方面非常昂贵,而scrypt在内存消耗方面设计得非常昂贵。使用当今硬件的CPU功率可以比内存更好地扩展,因此scrypt目前被认为是最好的选择。虽然它目前非常前沿,但在可用代码方面几乎没有得到支持。另一方面,bcrypt由PHP直接使用password_hash支持。