bcrypt.js如何知道哈希密码与纯文本密码相同?

问题描述

我不明白返回true或false的函数如何才能真正知道哈希密码是否相同。如果有纸和笔的人想要将纯文本与哈希文本进行比较,则他必须知道哈希文本的含义。但是,使密码比较功能正常工作不需要盐。

代码如下:

var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync("ilikepotatoes",salt);

然后比较的函数是:

bcrypt.compareSync("ilikepotatoes",hash);

那么Node.js如何真正知道我正在使用什么盐?

解决方法

the Wikipedia article on bcrypt

bcrypt哈希字符串的格式为:

$2b$[cost]$[22 character salt][31 character hash]

例如:

$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
\__/\/ \____________________/\_____________________________/
 Alg Cost      Salt                        Hash

它知道您正在使用的盐,因为它与哈希一起存储。