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