我只是在想,通过使用从密码本身创建的盐来创建密码哈希是否可以安全使用。下面是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
?>
你可以同时保护你的密码和你的盐。
-
使用SHA256或更高(2012),未来几年必须更高。
-
为每个用户使用不同的盐。
-
使用计算过的盐
-
创建一个16到32字节的Salt并存储在数据库中,名为'DBSalt'。
-
创建任何旧算法来操作盐,但只保留算法在代码中。甚至像DBSalt + 1这样简单的东西也是有用的,因为如果有人得到你的数据库,他们实际上没有正确的盐,因为正确的盐是计算出来的。
-
按如下方式计算密码:
CreateHash (saltAlgorithm (dbSalt),密码);
-
您可以通过以不同方式操作DBSalt的算法列表来增加安全性。每次用户更改密码时,也要对DBSalt
使用不同的计算。 您可以通过存储这些算法来增加安全性web服务器外部的系统,所以如果你的数据库和代码都得到被黑了,他们还是没有你的盐。
- 您还可以通过使用before和after,或者盐和数据库单独提供此信息来提高安全性。
"你可以通过…来提高安全性"的评论没有尽头。只要记住,每增加一次安全性,就会增加复杂性、成本等。
如何有效地将密码存储为数据库中的散列