javascript - bcrypt 比较另外两个字符串并返回 true
问题描述
我正在 Node.js 中编写刷新令牌 jwt。登录后,它会对它们进行哈希处理并将它们保存在数据库中。
- 第一个令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiOWRiMTcwMmMtNDkyYy00MTJmLTkyM2QtM2Y5MWQyYzk0NTNjIiwicm9sZSI6IkNVU1RPTUVSX1JPTEUiLCJpYXQiOjE2MDU0NjA4NTksImV4cCI6MTYwNTQ2NDQ1OX0.p6LTPotLugZ-JWp4Xmt4chwWxtqqZRXuXDBhDdqLsLI
- 第二个令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1dWlkIjoiOWRiMTcwMmMtNDkyYy00MTJmLTkyM2QtM2Y5MWQyYzk0NTNjIiwicm9sZSI6IkNVU1RPTUVSX1JPTEUiLCJpYXQiOjE2MDU0NjEzMjIsImV4cCI6MTYwNTQ2NDkyMn0.qMzg99DE1DvDjoMXeK08l12SlfbQd7GUSHEF5X8Mt4w
Bcrypt 哈希:
$2b$10$RTZbH4UONRaBnam.oALmhuIs/veX.h7e3CeMlmQjk9GVC4kKPGsBO
这两个令牌是不同的,bcrypt 在两种情况下表明它们与编码的哈希匹配。
我还通过网站调试了这个,同样的事情——两个不同的字符串都显示它们与哈希匹配——为什么?
这些是我的哈希方法:
/**
* generate hash from password or string
* @param {string} password
* @returns {Promise<string>}
*/
static async generateHash(password: string): Promise<string> {
return bcrypt.hash(password, 10);
}
/**
* validate text with hash
* @param {string} password
* @param {string} hash
* @returns {Promise<boolean>}
*/
static async validateHash(password: string, hash?: string): Promise<boolean> {
return bcrypt.compare(password, hash || '');
}
解决方案
bcrypt 限制为 72 个字符的“密码”
您的“密码”长度为 220 个字符,前 147 个字符相同(因为这只是 JWT 的标题和内容的第一部分,在两种情况下都是相同的)
因此,您的代码只是“散列”第一个相同的 72 个字符
推荐阅读
- mysql - mysql 8.0 上的“group by desc”语法错误,在 5.7 上很好
- jsf - 在 p:organigram 中设置值的问题
- android - 在仪器化单元测试中模拟方法
- python - 如何在python中将环境变量添加为time.sleep
- php - PHP中用于编辑页面的递归类别树
- javascript - 如何在 ReactJs 样式中有条件地调用不同的类名
- sql - 在 Hana 中使用 with 子句创建表
- python - TypeError:只能将str(不是“numpy.int64”)连接到str
- javascript - 在数组中查找字符串
- c# - 在 ASP.NET Core 2.2 中使用 InProcess 托管模型时,Serilog 不会将日志写入文件