我刚读了一个 post来创建一个登录系统,在阅读时我看到了密码哈希.
We are going to store an sha256 hash which is a string always
containing 64 characters.
本文正在教授使用sha256哈希函数.阅读本文之后,我没有停下来开始搜索更多关于创建安全登录系统的内容,然后我在wikiHow之前提出了这篇文章.在本文中,他们使用的是sha512哈希函数.这真的让我感到困惑,我将在下一个登录系统中使用哪个功能.我仍然搜索谷歌更好的文章,并在crackstation找到这篇文章.作者推荐sha256和sha512.
Only cryptographic hash functions may be used to implement password
hashing. Hash functions like SHA256,SHA512,RipeMD,and WHIRLPOOL are
cryptographic hash functions.
我认为我的搜索结束了,我可以使用sha256或sha512功能,但在搜索更多时我发现了这个SO Question. Robert K接受的答案对我来说有新的东西.关于我以前从未听过的事情是bcrypt和scrypt.
所有这些东西都写在大约2到4年前.
题
这些天用于PHP的最佳密码哈希算法是哪一种?
SHA系列算法设计得很快,因为它们不是为了这个目的而设计的.因此,它们本身有点不适合密码散列;虽然它们可以用作使它们适合的算法的一部分,例如PBKDF2(简而言之,重复散列数千次来拉伸它).
bcrypt和scrypt明确地设计得很慢,并且更适合密码散列. bcrypt在cpu功率方面设计非常昂贵,而scrypt在内存消耗方面设计得非常昂贵.使用当今硬件的cpu功率可以比内存更好地扩展,因此scrypt目前被认为是最好的选择.虽然它目前非常前沿,但在可用代码方面几乎没有得到支持.另一方面,bcrypt由PHP直接使用password_hash
支持.