bcrypt nodejs 无法按预期工作

bcrypt nodejs not works as expected

我将散列密码生成到我的数据库中。在传入的请求中,我在数据库中使用散列密码检查了我的纯输入密码。例如,如果我输入的密码是 XXXX,如果在中间添加一些字符,则 bcrypt compare method returns false。但是,如果我在输入密码的最后添加一些字符,我的 bcrypt 比较方法 returns 为真。请帮助让我知道为什么会这样。

我的代码。

const bcrypt = require('bcrypt');
const bcryptTest = async () => {
const input = "kw^#Ko38Q7GusXjd%L?DVXM^CVEF8&9c8L%4GupYcV/DZN3U7GN7Zfyd[Fi&yaNzss"

 //let hashedPassword = await bcrypt.hash(input, 12);
 //Hashed password generated from above
const hashedPassword = "b$GAFB9ahYHuu.2XQN5fqHoufHQUBuf2a8awNp67hJIN0xP77S5X2tK"
console.log('Hashed Password', hashedPassword);

const plainText = await bcrypt.compare(input, hashedPassword);
console.log(plainText);
}


Bcrypt 文档声明-

Per bcrypt implementation, only the first 72 bytes of a string are used. Any extra bytes are ignored when matching passwords. Note that this is not the first 72 characters. It is possible for a string to contain less than 72 characters while taking up more than 72 bytes (e.g. a UTF-8 encoded string containing emojis).

您输入的是 74 个字节。所以当你在中间添加额外的字符时,它实际上改变了输入并且它 returns false。但是最后多余的字符被忽略了。

您可以使用以下代码检查长度

let ans = Buffer.byteLength("kw^#Ko38Q7GusXjd%L? 
 DVXM^CVEF8&9c8L%4GupYcV/DZN3U7GN7Zfyd[Fi&yaNzss")
 console.log(ans)