密码盐存储

我想更新我目前仅使用MD5的密码设置。

现在我想要做的是用更强大的(也许sha256)和每个用户独特的盐。

问题是关于盐储存。

我是否将salt存储在数据库的自己的列中?

然后输入salt + password,当登录时,从数据库中调用盐和密码来创建一个。

或者我可以通过使用用户名,电子邮件和时间戳来制作盐,这也会给我每个用户一个独特的盐?

我想知道,如果有人拿着盐作为列的数据库,他们会知道每个用户的盐,然后他们可以破解密码。


盐不是秘密,它可以与散列一起存储为明文。 甚至没有必要在数据库中有第二个字段。 如果你看看PHP的crypt()函数,你可以看到,salt将被包含在散列值本身中。

盐的作用是使现有的彩虹表无用,因为必须为特定的盐制造彩虹表。 对每个哈希使用不同的盐将防止彩虹攻击,因为您必须为每个哈希创建一个彩虹表。 这就是为什么没有必要保持盐的秘密。

我会建议,如果你想改善你的密码散列系统,你做对了,散列函数很慢。 文章密码散列与bcrypt解释了为密码生成散列的重要点。

  • 根据密码生成盐,而不是每个用户。
  • 使用随机(唯一)盐,而不是从其他参数汲取的盐。
  • 使用慢哈希函数。
  • 最后但并非最不重要的是,不要害怕正确地做,应用程序的代码可以像使用MD5的当前实现一样简单。


    忘记MD5或SHA。 使用Bcrypt。 (Blow Fish Crypt)来自PHP 5.3及以上版本。 (加密方法2a)它更安全并且处理更慢。

    当使用Bcrypt时,salt与散列一起存储在同一个表中。 没有理由分开。

    http://php.net/manual/en/function.crypt.php


    只是阅读另一篇文章,有人说盐不是秘密,可以存储在数据库列。 所以这回答我的问题

    链接地址: http://www.djcxy.com/p/21841.html

    上一篇: password salt storing

    下一篇: How to create keystore and truststore using self