一尘不染

如何在MySQL中安全地存储用户的密码和盐?

mysql

因此,我在SO上发现应该将密码和“
salt”一起散列。(可在此处此处找到文章。)

这是代码:

$password = 'fish';

/* should be "unique" for every user? */
$salt= 'ABC09';

$site_key = 'static_site_key';

hash_hmac('sha1', $password . $salt, $site_key);

现在,我需要同时将$password和和保存$salt在MySQL中,如下所示:

+---------+--------+----------+-------+
| user_id |  name  | password |  salt |
+---------+--------+----------+-------+
|    1    | krysis |  fish**  | ABC09 |
+---------+--------+----------+-------+

** fish当然会被散列,而不是以纯文本形式存储。

我只是想知道以这种方式进行操作实际上是否有意义,因为通过这种方式,黑客或其他任何人也都可以理解吗?因此,如果他们破解了密码并且看到了密码,fishABC09他们会自动知道密码是fish?还是因为他不知道密码(因为密码secret_key未存储在数据库中)而使他“永远”无法破解密码?

如果我没有任何道理,对不起。我只是一直使用sha1密码,今天我找到了这些文章,这些文章讨论了添加salt


阅读 688

收藏
2020-05-17

共1个答案

一尘不染

有关于正确存储密码的好文章。例如:存储密码-做对了!

您应该为每个用户使用不同的盐,但是无需单独存储盐。在另一个线程中查看类似的讨论

顺便说一句,您可能不应该使用sha1,而应该使用诸如sha256或sha512之类的更强的东西(至少是为了避免不好的宣传)。关于此问题,有一个很好的答案:盐腌的SHA1与盐腌的SHA512相比有多不安全

2020-05-17