什么是 Salt Rounds 以及 Salts 如何存储在 Bcrypt 中?
What are Salt Rounds and how are Salts stored in Bcrypt?
我正在尝试为我正在制作的节点应用程序配置 Bcrypt,并且有几个关于盐的问题,我希望这里的人可以帮助回答。
什么是盐'round'?例如,在 github 文档 (https://github.com/kelektiv/node.bcrypt.js/) 中,它使用 10 的盐轮。这到底是什么意思?
Bcrypt生成的盐总是一样的吗?例如,如果我将用户的散列密码保存到数据库,它用于散列密码的盐对于每个密码是否相同?
盐是如何储存的?它可以抵御潜在的攻击吗?
- "salt round" 实际上是指 成本因素。成本因素控制计算单个 BCrypt 哈希所需的时间。成本因素越高,完成的散列轮数越多。将成本因子增加 1 会使必要的时间加倍。需要的时间越多,暴力破解就越困难。
- salt 是一个随机值,每次计算都应该不同,因此结果几乎不会相同,即使是相同的密码。
- 盐通常以可读的形式包含在生成的哈希字符串中。因此,通过存储哈希字符串,您还可以存储盐。查看此 answer 了解更多详情。
salt只包含在hash中,比较时不需要记住
var myPlaintextPassword='Saifio';
var saltRounds = 10;
const hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);
b$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | | |
| | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | |
| |盐 = nOUIs5kJ7naTuTFkBy1veu
| |
| cost-factor = 10 = 2^10 次迭代
|
hash-algorithm = 2b = BCrypt
我正在尝试为我正在制作的节点应用程序配置 Bcrypt,并且有几个关于盐的问题,我希望这里的人可以帮助回答。
什么是盐'round'?例如,在 github 文档 (https://github.com/kelektiv/node.bcrypt.js/) 中,它使用 10 的盐轮。这到底是什么意思?
Bcrypt生成的盐总是一样的吗?例如,如果我将用户的散列密码保存到数据库,它用于散列密码的盐对于每个密码是否相同?
盐是如何储存的?它可以抵御潜在的攻击吗?
- "salt round" 实际上是指 成本因素。成本因素控制计算单个 BCrypt 哈希所需的时间。成本因素越高,完成的散列轮数越多。将成本因子增加 1 会使必要的时间加倍。需要的时间越多,暴力破解就越困难。
- salt 是一个随机值,每次计算都应该不同,因此结果几乎不会相同,即使是相同的密码。
- 盐通常以可读的形式包含在生成的哈希字符串中。因此,通过存储哈希字符串,您还可以存储盐。查看此 answer 了解更多详情。
salt只包含在hash中,比较时不需要记住
var myPlaintextPassword='Saifio';
var saltRounds = 10;
const hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);
b$nOUIs5kJ7naTuTFkBy1veuK0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa
| | | | | | | hash-value = K0kSxUFXfuaOKdOKf9xYT0KKIGSJwFa | | | | |盐 = nOUIs5kJ7naTuTFkBy1veu | | | cost-factor = 10 = 2^10 次迭代 | hash-algorithm = 2b = BCrypt