Salting密码PHP,MySQL

Bas*_*sic 2 php mysql security

以下是盐密码的好方法吗?

hash('sha256', $_POST['password'], $_POST['email'])
Run Code Online (Sandbox Code Playgroud)

我使用用户电子邮件作为盐.有些人不使用电子邮件,有些人则说使用随机数.

即使我使用随机数,我仍然需要将它存储在我的MySQL表中,所以无论如何盐仍然是已知的,并且使用电子邮件的额外好处是彩虹表的可能性大大降低,即使我是使用16位整数?

Chr*_*son 8

盐背后的想法是防止黑客使用彩虹表.例如,如果黑客能够破坏您的数据库并找出散列密码是什么,他就不能轻易地对散列进行反向工程以找到会生成相同散列的值.

但是,存在称为彩虹表的已经散列的单词表.有些人已经经历了计算字典中每个单词的散列和其他常用密码的麻烦.如果黑客拥有其中一个表,加上数据库中的哈希密码,则可以很容易地找出密码是什么.

但是,salt会改变所有这一切,因为现在,您不是对密码进行哈希处理,而是对密码加上一些随机值进行哈希处理,这意味着彩虹表现在没用了.黑客是否可以妥协盐并不重要.

用明文保存盐是完全没问题的.你想要在所有用户之间使用一些不统一的东西,因为这又失败了.我个人喜欢使用帐户创建的时间戳.

那有意义吗?

  • @Christian,因为攻击者可以使用该盐简单地重建彩虹表.这将耗费时间,但并非不可能.对于每个哈希,使用不同的盐将需要不同的彩虹表,这对于攻击者危害数据库中的每个密码来说非常困难并且非常耗时. (2认同)
  • 确保定期备份数据库,并定期对备份数据进行验证和有效性检查(不要只备份并忘记它).如果您使用像注册日期这样的数据库存储盐,这是一个很好的策略,请确保您不会丢失所有用户.:) (2认同)