提问人:user846445 提问时间:2/25/2021 最后编辑:user846445 更新时间:2/28/2021 访问量:423
bcrypt nodejs 无法按预期工作
bcrypt nodejs not works as expected
问:
我在我的数据库中生成了哈希密码。在传入的请求中,我用数据库中的哈希密码检查了我的普通输入密码。例如,如果我的输入密码是 XXXX,并且如果在中间添加一些字符,那么 bcrypt 比较方法将返回 false。但是,如果我在输入密码的最后添加一些字符,我的 bcrypt compare 方法将返回 true。请帮助让我知道为什么会发生这种情况。
我的代码。
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 = "$2b$12$GAFB9ahYHuu.2XQN5fqHoufHQUBuf2a8awNp67hJIN0xP77S5X2tK"
console.log('Hashed Password', hashedPassword);
const plainText = await bcrypt.compare(input, hashedPassword);
console.log(plainText);
}
答:
3赞
Sandeep Patel
2/26/2021
#1
Bcrypt 文档指出-
每个 bcrypt 实现,仅使用字符串的前 72 个字节。匹配密码时,将忽略任何多余的字节。请注意, 这不是前 72 个字符。字符串可以 包含少于 72 个字符,但占用超过 72 个字节 (例如,包含表情符号的 UTF-8 编码字符串)。
输入为 74 字节。因此,当您在中间添加额外的字符时,它实际上会更改输入并返回 false。但最终额外的字符只是被忽略了。
您可以使用以下代码检查长度
let ans = Buffer.byteLength("kw^#Ko38Q7GusXjd%L?
DVXM^CVEF8&9c8L%4GupYcV/DZN3U7GN7Zfyd[Fi&yaNzss")
console.log(ans)
评论
0赞
user846445
3/1/2021
是的,你是对的。缩短了密码字段,它起作用了。
评论