php salt我的密码每个用户sha512 - 我这样做对吗?

And*_*sen 9 php salt password-storage sha512

我正在尝试为我的密码正确地执行每个用户和站点范围的盐.这是我得到的:

require('../../salt.php'); //this is above the web root and provides $salt variable
$pw = mysql_real_escape_string($_POST['pw']);
$per_user_salt = uniqid(mt_rand());
$site_salt = $salt //from salt.php that was required on first line
$combine = $pw . $per_user_salt . $site_salt;
$pw_to_put_in_db = hash("sha512", $combine);
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?谢谢

And*_*sen -2

根据这里的评论,我要做的就是:将 my 更改$combine为每个用户唯一但不存储在数据库中的内容。所以类似:$combine = $pw . md5($pw) . 'PoniesAreMagical' . $site_salt . md5($pw);等等等等...感谢您的帮助...

所以,对于那些第一次尝试弄清楚如何做到这一点的人(像我一样)...这一切都与算法有关...制作一些晦涩的、独特的、难以弄清楚的东西;因为如果有人想进入你的系统,他们就必须弄清楚这一点。感谢大家的精彩评论。

  • 我认为这不是最好的选择,并且我不同意@killzone 对您问题的评论。盐的想法是通过用户独特的盐来防止彩虹表攻击。即使了解您的算法,也不可能创建彩虹表。如果你使用 `md5($w)` 作为盐,那么任何知道你的算法内部原理的人都可以轻松地为你的整个用户群创建一个彩虹表——毕竟他拥有他需要的所有输入:密码、密码的哈希值(很容易)计算)、“小马”常数和位点盐。通过默默无闻的安全从来没有真正起作用! (3认同)
  • 最好和最简单的方法就是为每个用户创建一个随机盐并将其存储在数据库中。这样,盐对于每个用户来说都是唯一的,并且不能从其他输入(例如密码)中派生 - 因此,如果坏人知道您使用的算法,这对他们没有帮助 (2认同)