因此,我在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中,如下所示:
$password
$salt
+---------+--------+----------+-------+ | user_id | name | password | salt | +---------+--------+----------+-------+ | 1 | krysis | fish** | ABC09 | +---------+--------+----------+-------+
** fish当然会被散列,而不是以纯文本形式存储。
fish
我只是想知道以这种方式进行操作实际上是否有意义,因为通过这种方式,黑客或其他任何人也都可以理解吗?因此,如果他们破解了密码并且看到了密码,fishABC09他们会自动知道密码是fish?还是因为他不知道密码(因为密码secret_key未存储在数据库中)而使他“永远”无法破解密码?
fishABC09
secret_key
如果我没有任何道理,对不起。我只是一直使用sha1密码,今天我找到了这些文章,这些文章讨论了添加salt。
sha1
salt
有关于正确存储密码的好文章。例如:存储密码-做对了!
您应该为每个用户使用不同的盐,但是无需单独存储盐。在另一个线程中查看类似的讨论
顺便说一句,您可能不应该使用sha1,而应该使用诸如sha256或sha512之类的更强的东西(至少是为了避免不好的宣传)。关于此问题,有一个很好的答案:盐腌的SHA1与盐腌的SHA512相比有多不安全