我想知道使用不同的可用方法在PHP中散列密码,并将它们的组合用于越来越多的安全性。 我想知道这是否有用..?
$pass = "***";
$salt = "!@)#%%@(#&@_!R151";
$pass = sha1($pass.$salt);
$pass = md5($pass);
答案 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
调用中自动发生碰撞(因此它是碰撞的超集)。通过重新输入密码和盐,你可以防止这种情况发生,从而创建一个“更强大”的哈希而不是更弱的哈希......