我正在使用 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");
});
});
});
在一个示例中,盐是:$2a$10$mFFjRpY1Vrq7Fy1fFp0fMO
并且 hashed_password 是:$2a$10$mFFjRpY1Vrq7Fy1fFp0fMOVnlv9cKgAFdCQ5xdtlP6UoKz90i1FMu
哈希密码的开头与盐完全相同。如果攻击者可以访问盐,他不能只是从 hashed_password 中删除盐,然后暴力破解或使用预先确定的散列值表来确定密码吗?
我一直认为这应该是散列密码的顺序:
hash(salt + password)
不是:
salt + hash(password)