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

doc*_*pus 25 passwords hash salt password-protection bcrypt

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

  • 什么是盐'圆'?例如,在GitHub的文档(https://github.com/kelektiv/node.bcrypt.js/)它使用一个盐一轮的10是什么意思是什么呢?

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

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

mar*_*kli 29

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

  • @Webman - 成本系数为10表示计算完成2 ^ 10次,大约1000次.获得最终哈希需要的计算轮次越多,需要的cpu​​/gpu时间就越多.这对于为登录计算单个哈希没有问题,但是当你暴力破解数百万个密码组合时,这是一个很大的问题.试图在我的密码[教程](https://www.martinstoeckli.ch/hash/en/index.php)中解释它. (6认同)

小智 10

盐只包含在哈希中,我们在比较时不需要记住。

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


$2b$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
Run Code Online (Sandbox Code Playgroud)

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

  • 他解释了生成的字符串的组成部分。我认为这很有帮助。 (2认同)