如何在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
。
回答:
有关于正确存储密码的好文章。例如:存储密码-做对了!
您应该为每个用户使用不同的盐,但是无需单独存储盐。在另一个线程中查看类似的讨论
顺便说一句,您可能不应该使用sha1,而应该使用诸如sha256或sha512之类的更强的东西(至少是为了避免不好的宣传)。关于此问题,有一个很好的答案:盐腌的SHA1与盐腌的SHA512相比有多不安全
以上是 如何在MySQL中安全地存储用户的密码和盐? 的全部内容, 来源链接: utcz.com/qa/421352.html