可能重复:
PHP 密码的安全哈希和盐
我使用以下代码来散列和存储密码:
$salt=uniqid(mt_rand(), false);
hash('sha512',$pass+$salt);
在我们这个时代安全吗?如果不是,什么解决方案更好?crypt()
对这个目的有好处还是太旧了?
可能重复:
PHP 密码的安全哈希和盐
我使用以下代码来散列和存储密码:
$salt=uniqid(mt_rand(), false);
hash('sha512',$pass+$salt);
在我们这个时代安全吗?如果不是,什么解决方案更好?crypt()
对这个目的有好处还是太旧了?
为了使您的哈希更难暴力破解,请增加计算时间。sha512
是一个密码散列函数,它针对速度进行了优化。在对用户进行身份验证时,您只需对密码进行一次哈希处理,因此不要害怕花时间。
既然攻击者会计算数百万个哈希值,为什么不让你的哈希函数取0.1s
每个哈希值呢?您不会注意到任何显着的速度下降,但任何蛮力攻击都将是无效的。
话虽这么说,而不是出去编写自己的哈希函数来执行此操作:
hash = sha512(password)
for i in range(10000):
hash = sha512(hash) + salt
return hash
使用经过测试的解决方案phpass
,例如使用bcrypt
.
用盐散列是好的。但是,您想多次应用散列算法(几百个是一个不错的选择)。
以这种方式“拉伸”散列函数不会产生更强的散列,而是减缓蛮力攻击。
http://en.wikipedia.org/wiki/Key_stretching#Hash_based_key_stretching
这取决于你对它的使用,它不足以存储信用卡详细信息或银行详细信息(不是你会散列它们!)但对于网站密码来说,IMO 已经足够了,特别是考虑到你正在使用一个盐,它是 512 哈希。