此密码存储方法安全吗?


Is this password storage method secure?

我只是在想,通过使用从密码本身创建的盐来创建密码哈希是否可以安全使用。下面是php中的一个例子:

<?php
$pass = $_GET['pass'];
$salt = hash('whirlpool', $pass);
$pass = md5(hash('whirlpool', $salt.$pass));
echo $pass;
?>

这有意义吗?

问候。

设置salt的目的是让每个人的密码都是唯一的。因此,在这种情况下,只是散列他们的密码并将其作为盐添加,当给出相同的原始密码时,仍然会使两个用户的最终散列密码相等。最好给每个用户一个随机的salt,并将其存储在数据库密码旁边。

没有必要对密码进行散列、重新散列和重新散列。

使用具有良好哈希码算法的salt是一件好事,但您需要强制您的用户发送具有最小大小和字母数字字符的强密码

指出:

  • 使用sha1比md5更好。
  • 使用好的盐(感谢@John Bartholomew)
  • 强制您的用户创建强密码

我是这样做的

<?php
$my_key = "myapp";
$temp_pwd = htmlentities(trim($_POST['password']));
$hashed = sha1($my_key.$temp_pwd);
save $hashed in database on signup
and with every login attemp merge the input password value with your key and make a hash of it and than compare with database password value

?>

你可以同时保护你的密码和你的盐。

  1. 使用SHA256或更高(2012),未来几年必须更高。

  2. 为每个用户使用不同的盐。

  3. 使用计算过的盐

  4. 创建一个16到32字节的Salt并存储在数据库中,名为'DBSalt'。

  5. 创建任何旧算法来操作盐,但只保留算法在代码中。甚至像DBSalt + 1这样简单的东西也是有用的,因为如果有人得到你的数据库,他们实际上没有正确的盐,因为正确的盐是计算出来的。

  6. 按如下方式计算密码:

    CreateHash (saltAlgorithm (dbSalt),密码);

  7. 您可以通过以不同方式操作DBSalt的算法列表来增加安全性。每次用户更改密码时,也要对DBSalt

  8. 使用不同的计算。
  9. 您可以通过存储这些算法来增加安全性web服务器外部的系统,所以如果你的数据库和代码都得到被黑了,他们还是没有你的盐。

    1. 您还可以通过使用before和after,或者盐和数据库单独提供此信息来提高安全性。

"你可以通过…来提高安全性"的评论没有尽头。只要记住,每增加一次安全性,就会增加复杂性、成本等。

如何有效地将密码存储为数据库中的散列