gpt4 book ai didi

javascript - Bcrypt 在散列密码时不那么安全吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:43:26 25 4
gpt4 key购买 nike

我正在使用 bcrypt 来生成盐和散列密码,但我认为它不是很安全。当我使用以下代码时:

bcrypt.genSalt(10, function(err, salt) {
user.salt = salt;
bcrypt.hash(password, salt, function(err, hash) {
user.hashed_password = hash;
console.log(user.salt);
console.log(user.hashed_password);
user.save(function(err) {
if (err) console.log(err);
console.log("saved");
});
});
});

在一个示例中,salt 是:$2a$10$mFFjRpY1Vrq7Fy1fFp0fMO,hashed_pa​​ssword 是:$2a$10$mFFjRpY1Vrq7Fy1fFp0fMOVnlv9cKgAFdCQ5xdtlP6UoKz90i1FMu

散列密码的开头与盐完全相同。如果攻击者可以访问 salt,他不能直接从 hashed_pa​​ssword 中删除 salt 并使用暴力或使用预先确定的哈希值表来确定密码吗?

我一直认为这应该是散列密码的顺序:

hash(salt + password)

不是:

salt + hash(password)

最佳答案

散列密码的开头是盐,因为您需要访问盐以验证密码。

你看到的数据既不是 hash (salt + password) 也不是 salt + hash(password) -- 它的形式是

salt + hash(salt + password)

如果攻击者获得了对这些数据的访问权,那么:

  • 他们当然可以(理论上)暴力破解密码——没有任何技术可以阻止这种情况,但速率限制使攻击变得不切实际。此实例中使用的哈希函数经过专门设计,需要很长时间才能运行,从而间接限制攻击速率。
  • 他们不能使用标准的散列表来找出密码——这是因为散列值也包含唯一的盐。当然,盐是明文存在的,因此可以计算出一个表,但由于盐对于每个散列密码也是唯一的,这并不比暴力攻击好多少。

关于javascript - Bcrypt 在散列密码时不那么安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17717073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com