背景:
我想在我的小网站上添加登录功能,这是一个在线的php应用程序,我希望它能够承载未来更多的用户活动。
在进一步实现LightOpenID之前,我想先添加一个普通的登录功能。我学习的书名叫做《Head First PHP & MySQL》(2008年),该章节的最终代码使用 SHA('$user_password')
作为mysql查询的一部分。
由于我对Jeff Atwood的写作很感兴趣,所以我对bcrypt和scrypt都很了解。但由于没有php实现scrypt并且没有专用服务器来运行它,所以我决定目前至少研究一下实现bcrypt。
然而我并不完全幼稚,我知道我应该注意不要过度使用我非常谦虚的主机资源。php应用本身应该始终放在资源方面的任何其他事情之前。
Andrew Moore的方法 看起来不错(虽然我需要看看如何在我的主机上实现它,它使用的是php 5.2.17),它还附带了一个硬件速度提示:
您应该选择一些轮次,以产生200-250毫秒的工作量。bcrypt安全的部分原因是它很慢。您必须确保有一些轮次保持这种特性。 - Andrew Moore
另一个用户表示,对于他运行 microtime()
,Bcrypt(9) 的值为0.314,因此几乎是最佳的。
问题:
由于我只有非常谦虚的资源可用,并且我希望充分利用它们,让大部分资源留给php应用本身,在这种情况下,我是否仍然最好使用Bcrypt(4)而不是其他东西?
Bcrypt(4) 几乎立即返回true,但它仍然保持Moore所说的那种特性吗?(这是使GPU暴力破解更加困难的RAM方面吗?)或者在这一点上,SHA512或其他东西实际上也同样快但更安全?
我预计在这种情况下Bcrypt(4)会获胜,但我怎么知道呢? :p