我刚刚阅读post来创建一个登录系统,在阅读时我看到了密码哈希。
我们将存储一个始终为字符串的sha256哈希值 包含64个字符。
本文正在教授使用 sha256 哈希函数。阅读本文之后,我没有停下来开始搜索更多关于创建安全登录系统的信息,然后我在wikiHow提出了这篇文章。在本文中,他们使用 sha512 哈希函数。这真的让我感到困惑,我将在下一个登录系统中使用哪个功能。我仍在谷歌搜索更好的文章,并在crackstation找到了这篇文章。作者推荐使用sha256和sha512。
只有加密哈希函数可用于实现密码 散列。哈希函数如SHA256,SHA512,RipeMD和WHIRLPOOL都是 加密哈希函数。
我认为我的搜索结束了,我可以使用sha256
或sha512
功能,但在搜索更多时,我发现了SO Question。 Robert K接受的答案对我来说有新的东西。以前我从未听说过的事情是 bcrypt 和 scrypt 。
所有这些东西都写在大约2到4年前。
问题
目前PHP使用的最佳密码哈希算法是哪一种?
答案 0 :(得分:4)
这里最重要的是你要选择一个慢的哈希。任何这些哈希值唯一可行的攻击向量是暴力强迫。这意味着,攻击者只能一个接一个地尝试所有可能的密码,使用与您相同的算法对它们进行散列,并将它们与散列进行比较。一个密码需要的时间越长,找到匹配就越不可行。
SHA系列算法设计得很快,因为它们不是为了这个目的而设计的。因此,它们本身有点不适合密码散列;虽然它们可以作为使它们适合的算法的一部分,例如PBKDF2(简而言之,重复散列数千次,以拉伸)。
bcrypt和scrypt明确设计为慢,因此更适合密码散列。 bcrypt的设计在CPU功率方面非常昂贵,而scrypt在内存消耗方面设计得非常昂贵。使用当今硬件的CPU功率可以比内存更好地扩展,因此scrypt目前被认为是最好的选择。虽然它目前非常前沿,但在可用代码方面几乎没有得到支持。另一方面,bcrypt由PHP直接使用password_hash
支持。