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)
我将散列密码生成到我的数据库中。在传入的请求中,我在数据库中使用散列密码检查了我的纯输入密码。例如,如果我输入的密码是 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)