这个问题通常是因为输入的密码和哈希值不匹配所导致的。在使用 Bcrypt 的 compareSync 函数时,需要确保输入的密码和哈希值匹配。这个问题的解决方法可以有几种:
在使用 compareSync 函数前,需要确保输入的密码和哈希值都是正确的。代码示例如下:
const bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 'mypassword';
const someOtherPlaintextPassword = 'notmypassword';
// 哈希密码
const hashedPassword = bcrypt.hashSync(myPlaintextPassword, saltRounds);
// 输入正确的密码
console.log(bcrypt.compareSync(myPlaintextPassword, hashedPassword)); // 输出为 true
// 输入错误的密码
console.log(bcrypt.compareSync(someOtherPlaintextPassword, hashedPassword)); // 输出为 false
如果你对密码进行哈希时使用了不同的哈希算法、散列次数、盐或者轮廓细节,那么在比较哈希值时会出现问题。可以检查哈希值是否一致,例如两次哈希的密码是否一样。代码示例如下:
const bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 'mypassword';
// 哈希密码
const hashedPassword1 = bcrypt.hashSync(myPlaintextPassword, saltRounds);
const hashedPassword2 = bcrypt.hashSync(myPlaintextPassword, saltRounds);
console.log(hashedPassword1); // 输出一个哈希值
console.log(hashedPassword2); // 输出一个不同的哈希值
// 检查两个哈希值是否匹配
console.log(bcrypt.compareSync(myPlaintextPassword, hashedPassword1)); // 输出为 true
console.log(bcrypt.compareSync(myPlaintextPassword, hashedPassword2)); // 输出为 true
console.log(hashedPassword1 === hashedPassword2); // 输出为 false
如果你在比较哈希值时使用了错误的 Bcrypt 版本,也会出现比较错误的情况。可以使用 require('bcryptjs') 引入正确的模块并使用它