这种密码存储方法是否安全?

时间:2011-08-04 14:23:03

标签: php security hash passwords

我只是想如果使用从密码创建的salt创建密码哈希是可以安全使用的。这是php中的一个例子:

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

这有意义吗?

问候。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

没有必要散列并重新散列并重新散列密码。

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

注释:

  • 使用sha1优于md5。
  • 使用好salt(感谢@John Bartholomew)
  • 强制您的用户创建强密码

答案 2 :(得分:0)

我这样做

<?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


?>

答案 3 :(得分:0)

您可以保护密码和盐。

  1. 使用SHA256或更高版本(2012年),并且在未来几年内必须更高。

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

  3. 使用计算盐。

  4. 创建一个16到32字节的Salt并将其存储在数据库中,称为“DBSalt”。

  5. 创建任何旧算法来操作salt,但仅将算法保留在代码中。即使像DBSalt + 1这样简单的东西也很有用,因为如果有人获得了你的数据库,他们实际上没有正确的盐,因为计算了正确的盐。

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

    CreateHash(saltAlgorithm(dbSalt),password);

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

  8. 您可以通过存储这些算法来增加安全性 系统外部的Web服务器,以便您的数据库和代码都可以获得 他们仍然没有你的盐。

    1. 您还可以通过使用之前,之后或两者来提高安全性,并且仅数据库不提供此信息。
  9. “你可以通过...增加安全性”评论没有尽头。请记住,每次添加安全性时,都会增加复杂性,成本等......

    How to effectively salt a password stored as a hash in a database