我正在开发一些旨在部署到用户服务器上的PHP——可能是廉价/共享托管(意味着最低公分母PHP 5.2,不修改PHP安装)。密码散列的常见建议似乎是bcrypt或scrypt,通过PHP 5.2的可安装扩展。
我一直在考虑使用一个迭代的SHA-512,它有一个强大的每个用户的salt,但它听起来并不能真正与bcrypt/scrypt相比。
如果不能修改基本PHP安装,我有什么选项可以实现强密码安全?
我要说的第一件事是不应该考虑PHP 5.2。它在近两年前被宣布报废,当时还没有任何安全补丁,所以任何仍在使用它的主机显然都不重视安全。你应该考虑将5.3作为目前的最低版本。
没有密码。。。
PHP的下一个版本(v5.5)将内置一组函数,提供标准化的密码哈希。这个想法是一劳永逸地消除PHP中错误密码练习的任何借口。一旦这个版本发布,这将是唯一推荐的处理密码的方法。
同时,您可以下载一个兼容库,该库为当前PHP版本实现相同的功能。从这里下载:https://github.com/ircmaxell/password_compat
我的建议是使用这个库,它包含在if(function_exists())
包装中。这样,您就可以使用最佳实践,并在5.5发布时准备好使用内置函数。
另请参阅:http://www.h-online.com/open/news/item/PHP-5-5-should-reduce-password-sloppiness-1707835.html以供参考。
希望能有所帮助。
正如对原始问题的评论中所提到的,一个PHP<5.2 PBKDF2的实施可在http://crackstation.net/hashing-security.htm.
PBKDF2可以说是比bcrypt/scrypt更好的选择,经过了更彻底的研究和测试。