在PHP中正确存储密码的方法

3

哈希算法和加密算法的基本区别

在数据库中存储密码的首选方法

如何安全地存储密码

我对两件事感到困惑。如果 PHP 7.0 bcrypt 提供了随机盐,我们应该如何检索它以进行密码验证?

我理解有一些键延展函数如 PBKDF2,但是有人能否向我解释为什么像 scrypt 这样的内存密集型哈希算法比 bcrypt 更受青睐?除了暴力攻击方面之外。从我在网上阅读的逻辑来看,人们建议使用多次迭代的 scrypt。


请查看此链接:https://dev59.com/NFwY5IYBdhLWcg3wCD6W#33109078 - Linus
@Anmol 谢谢,不确定为什么我找不到这篇帖子。 - White Lotus
为什么不建议使用Scrypt - Linus
Bcrypt哈希将盐存储在$定界符之间的哈希中。您无需将盐外部存储。$2y$10$TwentytwocharactersaltThirtyonecharacterspasswordhash是其工作原理的示例。 - Crecket
1个回答

2
关于bcrypt和盐的第一个问题: 以及哈希字符串一起包含在结果字符串中,还有成本。这三个字符串的长度都是固定的,因此可以轻松地检索它们。
更详细的解释,请参见此答案
scryptbcrypt的新版本,需要更多的RAM才能运行。 RAM要求背后的原因是,基于CPU周期的加密(基于I/O)很容易被现代GPU、多核等暴力破解。另一方面,RAM不太容易扩展,因此增加RAM + 多个操作的组合从理论上讲是一种更安全的方式。
请在这个好答案中了解更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接