-1

我正在寻找可以为我的用户添加的密码中的最佳盐。

我已经用小盐保存了用户密码,例如:

$pass = "deerox";
$salt = "fg55fd45";
$password = md5($pass . $salt);

所以我想要我sha512现在可以使用的最好的盐,而且攻击者需要很长时间才能破解一个密码。

我不能为所有用户生成随机盐,因为我已经说过我已经为他们保存了密码。

$pass1 = "deerox";
$pass = md5($pass1);
$salt1 = "fRY^YXCH%^d5fdffdstre324e6t45";
$salt2 = "sdgdfg#$#$@%FDG%GFDG54fds545342";
$password = hash("sha512", $salt1 . $pass . $salt2);

只是想知道它是安全的还是我可以让它更安全?

4

2 回答 2

3

您的密码加密方案错误。在其上添加任何东西都不会使其更加安全。您需要的是从一开始就进行良好的散列+加盐;现在为时已晚,您无法真正提高已散列密码的安全性。

一个静态盐,甚至两个,或者从密码本身派生的盐都不是盐;盐需要是独立于密码的随机唯一值,以增加每个散列的唯一性。

在您的数据库中添加一个新标志,说明哪些密码当前使用您的“旧”散列系统。当用户下次登录并且您有机会获得他的明文密码时,请利用该机会在更好的系统中重新设置密码,然后更新数据库中的标志。通过这种方式,您可以将您的用户群一点一点地升级为完全透明的安全哈希。

需要每个密码的动态盐和适当的哈希值,如 bcrypt 或 scrypt。使用http://github.com/ircmaxell/password_compat来获得一个很好的、易于使用的库,它实现了两者。

于 2013-06-08T12:31:57.813 回答
0

首先不要哈希两次密码。

接下来的事情。如果您有一个数据库,您还应该为每个用户在数据库中设置一个随机盐。在您的代码中添加盐(就像您已经添加的一样)。

不要使用 sha1 或 md5 作为密码。您可以使用 sha512。您还可以在此处查看有关良好密码散列的更多信息:

PHP 密码的安全哈希和盐

于 2013-06-08T12:23:14.423 回答