背景:
我想在我的小网站上添加一个登录,这是一个在线 php 应用程序,我想构建它以便将来能够承受大量用户活动。
在进一步研究实现 LightOpenID 之前,我想添加一个普通登录。我正在学习的书名为 Head First PHP & MySQL (2008),本章的最终代码SHA('$user_password')
用作 mysql 查询的一部分。
当我对 Jeff Atwood 的作品感兴趣时,我很清楚 bcrypt 和 scrypt。但是由于没有 scrypt 的 php 实现并且没有专门的服务器来运行它,我决定至少现在考虑实现 bcrypt。
但是我并不完全天真,我知道我应该注意不要过度扩展我非常不起眼的托管资源。php 应用程序本身应该始终排在与资源有关的任何其他内容之前。
Andrew Moore 的方法看起来不错(尽管我必须看看如何在我的主机使用的 php 5.2.17 上实现它)并且它带有硬件速度提示:
您应该选择导致 200-250 毫秒工作的轮数。bcrypt 安全的部分原因是它很慢。您必须确保有多个回合保持该特征。——安德鲁·摩尔
另一位用户表示,对于他microtime()
来说,Bcrypt(9) 的运行结果为 0.314,因此接近最优。
问题:
鉴于我只有非常简陋的资源可供使用,我想充分利用它们,将大部分资源留给 php 应用程序本身,我还是最好使用 Bcrypt(4) 而不是其他东西吗?
Bcrypt(4) 几乎立即返回 true,但它仍然保留 Moore 所说的那个特性吗?(这会是与 RAM 相关的部分,它使 GPU 暴力破解变得更加困难吗?)或者 SHA512或其他东西实际上会同样快但更安全在此刻?
我希望 Bcrypt(4) 在这种情况下获胜,但我真的知道吗?:p