salt + sha512 + md5加密

时间:2014-01-08 17:37:20

标签: php security hash passwords password-protection

我有以下代码:(只是加密/散列的测试文件)

<!doctype html>
<html>
<head></head>
<body>

  <?php

    error_reporting('off');

    if (isset($_POST['submit'])) {
        $salt = "2bZ@<^$";
        $hash = hash("sha512", $_POST['hash']);
        $hash = $salt . $hash;
        $hash  = md5($hash);
        echo $hash;
        $hashLen = strlen($hash);
        echo "<br>The length of the hashed word is " . $hashLen . " characters long!";
    }

    ?>

    <form action="hashed.php" method="post">
      <input type="text" name="hash">
      <input type="submit" value="Hash" name="submit">
    </form>

</body>
</html>

这有多安全? 我知道这很可能是被黑客入侵,但需要多长时间? 我目前正在制作一个php / mysqli注册表,并希望尽可能安全地使用户的密码,这样黑客就需要很长时间才能破解用户的密码。为了加密它,我可以使用它,例如:

用sha512,md5(md5),添加不同的盐,另外两种sha512,另一种md5和另一种不同的盐进行哈希处理!

听起来有多安全?黑客破解密码需要多长时间? 请您使用非常非常安全的加密方法告诉我。另外,我想让用户使用cookie登录:需要一种安全的方式将他们的信息存储在cookie中!

提前致谢:)

2 个答案:

答案 0 :(得分:9)

这是不安全的。它与Dave's home brew hash/kinda stupid algorithm类似,答案解释了它的错误。在你的情况下,我只会说你只使用非常快的哈希进行2次计算,而这远远不足以击败基于GPU的破解。

此外,您应该never roll your own cryptography,当然同样适用于散列函数。而是使用PHP附带的标准且经过良好测试的password hashing functions

$password = "HelloStackOverflow"; // example password

$hash = password_hash($password, PASSWORD_BCRYPT); // here's the hash of the previous password

// you can set the "complexity" of the hashing algorithm, it uses more CPU power
// but it'll be harder to crack, even though the default is already good enough

$hash = password_hash($password, PASSWORD_BCRYPT, ["cost" => 10]); 

if (password_verify($password, $hash)) { // checking if a password is valid
    echo "Welcome back !"; // valid password
} else {
    echo "You're not the one you're pretending to be..."; // invalid password
}

如果您的PHP安装太旧(<5.5)并且没有password_*函数,则可以使用this library来提供与这些函数的向前兼容性;用法与上面的示例保持一致。

答案 1 :(得分:1)

  

我目前正在制作一个php / mysqli注册表,并希望尽可能安全地保护用户的密码,这样黑客就需要很长时间才能破解用户的密码

那么,对于一个好的密码存储系统的元素(以及它们所保护的威胁),请参阅John {@} Johnven为OWASP写的Secure Password Storage Cheat SheetSecure Password Storage paper。它将引导您完成整个威胁模型,并解释为什么事情以特定方式完成。

  

用sha512,md5(md5),加入不同的盐,另外两种sha512,另一种md5和另一种不同的盐来混合它!   ...   这有多安全?

嗯,有标准和可接受的做事方式,然后就是没有标准的做事方式。我认为你的计划属于后期。

使用被广泛接受的东西也许是一个好主意。

  

黑客破解密码需要多长时间?

裂缝并不是唯一的威胁。更有可能的是,那个试图闯入你的组织的人将会使用从Adobe漏洞收集的数百万个密码中的顶级密码,LinkedIn漏洞,Last.fm漏洞,&lt;最喜欢的&gt;违反....例如:

如果您拥有数千个最受欢迎的密码列表,为什么还要打扰暴力?

因此,第一最佳防御措施是使用过滤用户错误密码选项的单词列表。也就是说,不要让用户首先选择弱密码或已知密码。

如果有人擅离使用您的密码数据库,那么他或她将使用相同的密码列表来尝试猜测您的用户密码。他或她可能甚至不会打扰暴力强迫因为他或她将使用密码列表恢复如此多的密码。

据我了解,这些单词列表在实现为Bloom Filter时非常小。它们的大小只有KB,即使有数百万个密码。请参阅Peter Gutmann的Engineering Security进行深入讨论。