我正在使用bcrypt生成salt和hash密码,但我不认为它是非常安全的。 当我使用以下代码时:
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_password为:$2a$10$mFFjRpY1Vrq7Fy1fFp0fMOVnlv9cKgAFdCQ5xdtlP6UoKz90i1FMu
散列密码的开头与salt完全相同。如果攻击者有权访问salt,他是否只能从hashed_password中删除盐并强制使用或使用预定哈希值的表来确定密码?
我一直以为这应该是哈希密码的顺序:
hash(salt + password)
不
salt + hash(password)
答案 0 :(得分:17)
哈希密码的开头是盐,因为您需要访问盐以验证密码。
您看到的数据既不是哈希(盐+密码)也不是盐+哈希(密码) - 它的格式为
salt + hash(salt + password)
如果攻击者获得对此数据的访问权限,则: