什么是Salt Rounds以及Salt如何存储在Bcrypt中?

问题描述 投票:0回答:2

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

  • 什么是盐“圆”?例如,在 github 文档 (https://github.com/kelektiv/node.bcrypt.js/) 中,它使用 10 轮的盐。这到底意味着什么?

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

  • 盐是如何储存的?它是否免受潜在攻击?

hash passwords password-protection bcrypt salt
2个回答
113
投票
  1. “盐轮”实际上意味着成本因素。成本因素控制计算单个 BCrypt 哈希值所需的时间。成本系数越高,进行的哈希轮次就越多。将成本系数增加 1 会使所需时间增加一倍。需要的时间越多,暴力破解就越困难。
  2. 盐是一个随机值,每次计算都应该不同,因此即使密码相同,结果也几乎不会相同。
  3. 盐通常以可读形式包含在生成的哈希字符串中。因此,在存储哈希字符串的同时,您还存储了盐。看看这个answer了解更多详情。

22
投票

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

var myPlaintextPassword='Saifio';  
var saltRounds = 10;   
const hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);
$2b$10$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |                     |
 |  |  |                     hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
 |  |  |
 |  |  salt = nOUIs5kJ7naTuTFkBy1veu
 |  |
 |  cost-factor = 10 = 2^10 iterations
 |
 hash-algorithm = 2b = BCrypt
© www.soinside.com 2019 - 2024. All rights reserved.