这是我当前在 PHP/SQL 项目中的密码哈希过程...
- 从 /dev/urandom 中获取 512 位的每用户盐,除了最终哈希值之外,还存储在用户的数据库记录中
- 从 /dev/urandom 中取出存储在文件系统中的 512 位“pepper”。这是一个
每个应用程序都是恒定的,并且对于每个用户来说都是相同的
- Then
hash('sha512', $password.$salt.$pepper, TRUE)
哈希和盐以二进制形式存储在数据库中,主要是出于习惯。我认为这在安全性方面没有任何区别。如果有的话,它对于 SQL 备份来说稍微不太方便,并且使得 PHP 代码appear稍微复杂一些。
Is hash()
SHA-256 或 SHA-512 通常被认为已被 bcrypt 取代?
我相信 SHA-2 (256/512) 仍然被认为是加密安全的,而且我可能过度使用了熵位。与攻击者从数据库转储中逆向工程 SHA-2 哈希相比,我的代码中的缺陷更有可能导致问题。
但我应该更新我的方法来使用crypt()
用 CRYPT_BLOWFISH 代替(我相信这被称为 bcrypt,河豚在技术上是一种密码而不是散列算法)?
即使只是作为未来的最佳实践?
我并不特别关心算法的计算费用(在合理范围内)。这只会在创建帐户、更改密码或登录时进行哈希然后比较时成为一个因素。这些活动只占页面浏览量的一小部分。我想在某种程度上越慢越好,如果它使服务器更难生成,那么它将使攻击者的工作变慢以进行暴力破解。
干杯,B
如果你可以等到 php 5.5,将会有一些内置的有用功能:
https://gist.github.com/3707231
在那之前,请使用 crypt - 您可以查看新函数的前向兼容端口:
https://github.com/ircmaxell/password_compat
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)