3

我只是在阅读一篇创建登录系统的帖子,并在阅读时看到了有关密码哈希的信息

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

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

只有密码散列函数可以用于实现密码散列。SHA256、SHA512、RipeMD 和 WHIRLPOOL 等哈希函数是加密哈希函数。

我以为我的搜索已经结束,我可以使用sha256sha512运行,但在搜索更多时,我发现了这个SO QuestionRobert K接受的答案对我来说有新的东西。我以前从未听说过的事情是bcryptscrypt

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

问题

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

4

1 回答 1

9

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

SHA 系列算法的设计速度很快,因为它们并非设计用于此目的。因此,它们本身有点不适合密码散列;尽管它们可以用作使其适合的算法的一部分,例如PBKDF2(简而言之,它会重复散列数千次以拉伸它)。

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

于 2013-08-31T12:28:00.360 回答