密码盐存储

Gar*_*rry 2 php authentication passwords hash salt

我想更新当前仅使用MD5的密码设置.

现在我想做的是使用更强大的东西(可能是sha256),每个用户使用独特的盐.

问题是关于盐储存.

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

然后哈希盐+密码,当涉及到登录时,从数据库中调用salt和密码,制作一个.

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

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

mar*_*kli 5

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

这是盐的工作,使已经存在的彩虹板无用,因为必须为一种特定的盐建造彩虹.为每个哈希使用不同的salt将阻止rainbowtable攻击,因为您必须为每个哈希创建一个rainbowtable.这就是为什么没有必要保持盐的秘密.

我建议,如果你想改进你的密码哈希系统,你做得对,哈希函数很慢.使用bcrypt的文章密码哈希解释了为密码生成哈希的重要点.

  • 每个密码生成一个salt,而不是每个用户.
  • 使用随机(独特)盐,而不是从其他参数中获取的盐.
  • 使用慢哈希函数.

最后但同样重要的是,不要害怕正确地执行它,应用程序的代码可以像使用MD5的当前实现一样简单.