在我的local-register
中,我将用户数据存储在数据库中。要使用bcrypt哈希密码:
console.log(password);
password = bcrypt.hashSync(password);
console.log(password);
如果我使用密码stackoverflow
注册用户,则密码如下所示:
stackoverflow
$2a$10$uoJH1Wo9b7SQploRptfODe1Q2kRC3skQoUNOIhAmHg2AWykWQwGvW
当我使用密码stackoverflow@stackoverflow.com
stackoverflow
时
var hashedpassword = bcrypt.hashSync(password);
console.log(password);
console.log(hashedpassword);
stackoverflow
$2a$10$aq869JEMWBQ8vCfXfuRvlOPdUvq.UhTz4Ge.kB3n7wSyvhjBsm8r2
因此,即使我使用相同的bcrypt模块,每次登录时哈希都会有所不同。
答案 0 :(得分:3)
我不理解bcrypt的内部工作原理,但是每次哈希值对于相同的字符串看起来可能不同,因为salt是作为哈希的一部分生成的。因此,你做不到:
stored = hash(old);
guess = hash(guess);
valid = stored == guess;
相反,您必须使用compare
方法,如:
/* password is *not* hashed! */
bcrypt.compare(password, usersHashedPassword, cb);