PHP不同的单向哈希密码安全性

时间:2010-09-02 07:30:04

标签: php security md5 sha1 password-protection

我想知道使用不同的可用方法在PHP中散列密码,并将它们的组合用于越来越多的安全性。   我想知道这是否有用..?

$pass = "***";
$salt = "!@)#%%@(#&@_!R151";
$pass = sha1($pass.$salt);
$pass = md5($pass);

5 个答案:

答案 0 :(得分:5)

不。组合不会增加任何安全性 实际上你让它不太安全。从理论上讲,无论如何。

我觉得哈希问题被高估了。
没有人担心任何其他安全问题,但是每个人都渴望在十亿年内制造一个不可破解的哈希。放松,伙计。还有其他数千种方法可以打破您的应用。

答案 1 :(得分:5)

而不是那样,您可以使用更强大的哈希算法,例如 sha512 与强盐和UserID的组合:就像它一样这样:

 echo hash('sha512', 'MyPassword' . $StrongSalt . $UserID);

SHA512实际上是SHA-2,没有找到任何冲突。见wikipedia

答案 2 :(得分:0)

我想添加一种盐就足够了,但如果你想要更多,也许可以:

sha1($salt. sha1($salt. $pass));

$salt包含一些非打印字符,任意二进制数据或类似内容。

再一次,我想这不会增加很多,因为实现我只看到添加$ salt,但为什么不会在未来的时代更安全:)

答案 3 :(得分:0)

您的密码最有可能,永远不会100%安全。

尝试查看应为每个用户生成的nonce.

答案 4 :(得分:0)

IF 你打算这样做,不要只是MD5的结果:

$pass = "***";
$salt = "!@)#%%@(#&@_!R151";
$pass = sha1($pass.$salt);
$pass = md5($pass);

相反,在结果和输入上运行md5 ......

$pass = "***";
$salt = "!@)#%%@(#&@_!R151";
$tmp = sha1($pass.$salt);
$pass = md5($tmp . $pass . $salt);

原因是,如果你做md5(sha1()),你基本上会增加碰撞的机会。原因是所有sha1碰撞都会在md5调用中自动发生碰撞(因此它是碰撞的超集)。通过重新输入密码和盐,你可以防止这种情况发生,从而创建一个“更强大”的哈希而不是更弱的哈希......