问题描述
我不明白返回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
它知道您正在使用的盐,因为它与哈希一起存储。