什么是盐轮以及盐如何储存在Bcrypt中?

时间:2017-10-11 16:37:01

标签: hash passwords password-protection bcrypt salt

我正在尝试为我正在制作的节点应用配置Bcrypt,并且有几个关于盐的问题,我希望有人可以帮助回答。

  • 什么是'圆''?例如,在github docs(https://github.com/kelektiv/node.bcrypt.js/)中,它使用了一个10的盐轮。这究竟是什么意思?

  • Bcrypt生成的盐总是一样吗?例如,如果我将用户的散列密码保存到数据库,那么用于散列密码的盐是否与每个密码相同?

  • 如何储存盐?它是否可以抵御潜在的攻击?

2 个答案:

答案 0 :(得分:21)

  1. 用"盐轮"它们实际上意味着成本因素。成本因子控制计算单个BCrypt哈希所需的时间。成本因素越高,散列轮次就越多。将成本系数提高1可使所需时间增加一倍。需要的时间越多,蛮力就越难。
  2. 盐是一个随机值,并且每次计算都应该有所不同,因此即使是相同的密码,结果也几乎不一样。
  3. salt通常以可读的形式包含在生成的哈希字符串中。因此,通过存储哈希字符串,您还可以存储盐。有关详细信息,请查看此answer

答案 1 :(得分:0)

盐仅包含在哈希中,我们在比较时无需记住。

var myPlaintextPassword='Saifio';  
var saltRounds = 10;   
const hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);


$2b$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa

| | | | | | |哈希值= K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa | | | | |盐= nOUIs5kJ7naTuTFkBy1veu | | |成本系数= 10 = 2 ^ 10次迭代 | 哈希算法= 2b = BCrypt