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

Correct way to store passwords in PHP

Fundamental difference between Hashing and Encryption algorithms

Preferred Method of Storing Passwords In Database

http://codahale.com/how-to-safely-store-a-password/

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

我了解 PBKDF2 等密钥扩展函数,但有人可以向我解释为什么像 scrypt 这样的内存密集型哈希算法比 bcrypt 这样的算法更受欢迎吗?除了暴力攻击方面。根据我在网上阅读的逻辑,人们建议使用 scrypt 进行多次迭代。

关于 bcrypt 和 salt 的第一个问题:salt 包含在结果字符串以及 cost 中,以及与哈希字符串。三个字符串中的每一个都具有恒定长度,因此可以轻松检索。

有关更详尽的解释,请参阅 this answer


scryptbcrypt 的更新版本,需要更多 RAM 才能运行。 RAM 要求背后的原因是 CPU 基于循环的加密(基于 I/O)很容易使用现代 GPU、多核等进行暴力破解。另一方面,RAM 不那么容易扩展, 因此增加 RAM + 多个操作的组合 理论上 是一种更安全的方法。

this great answer 中阅读更多相关信息。