4

会强多少

return sha1($salt.sha1($passwd));

可以比作:

return sha1($salt.$passwd);

$salt是长度为 12 的每个用户字符串,由强随机 ASCII 组成。

4

3 回答 3

4

它的强度正好是原来的两倍,因为攻击者需要为蛮力攻击执行两倍的 SHA1 计算。

当然,这仍然不是很令人印象深刻。另一方面,在一个循环中执行 SHA1 5000 次对于授权来说是可行的,但会使攻击花费 5000 倍的时间——这种技术被称为密钥强化。然而,它实际上只是 Jacco 提到的适应性成本散列算法的一个穷人的替代品。

于 2010-01-11T16:31:32.997 回答
3

乍一看,如果没有深厚的加密知识,我会说它一点也不强大。

顺便说一句,通常建议使用

sha1($login.$salt.$passwd);

这样 2 个具有相同密码的用户就不会具有相同的哈希值。

于 2010-01-11T16:10:34.430 回答
1

据我所知,实力没有区别。

由于通常的做法是在密码哈希之前添加盐,因此攻击者通常知道盐。但这并没有破坏盐的目的。

一般而言,将 $login/$username 添加到散列(Vinzz的解决方案)不是一个好主意,因为如果用户更改他或她的用户名会导致问题。更好的解决方案是使用随机 salt

使用的散列算法确实有所作为。SHA1被认为是密码损坏,不应用于散列密码。

一般来说 BCRYPT(基于 Blowfish 的自适应成本散列算法)被认为是最好的做法( PHP 的crypt();CRYPT_BLOWFISH的标志) 其他可靠的选项是 SHA256 及更高版本。

编辑:
我在这里写了一个关于加盐的更长答案:stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/

于 2010-01-11T16:20:18.510 回答