【问题标题】:How can bcrypt.js know that the hashed password is the same as the plain text password?bcrypt.js 怎么知道散列密码和明文密码一样?
【发布时间】:2020-10-05 16:39:08
【问题描述】:

我不明白返回 true 或 false 的函数如何真正知道散列密码是否相同。如果一个拿着纸和笔的人想要将纯文本与散列文本进行比较,他必须知道散列文本的盐值。然而,密码比较功能不需要加盐。

代码如下:

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

然后比较的函数是:

bcrypt.compareSync("ilikepotatoes", hash);

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

【问题讨论】:

    标签: javascript node.js bcrypt security


    【解决方案1】:

    the Wikipedia article on bcrypt

    bcrypt 哈希字符串的格式为:

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

    例如:

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

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

    【讨论】:

    • 所以昆汀。 ¿ 您想将每个用户的 Salt 保存在数据库中吗?除了散列密码
    • 是的。您需要知道盐,以便您可以比较散列密码。盐是否已知并不重要,只要盐不总是相同的(因为这使得它容易受到彩虹表的影响)。您不需要显式保存它,它只是bcrypt.hashSync 输出的一部分
    猜你喜欢
    • 1970-01-01
    • 2020-08-09
    • 2020-04-12
    • 2012-10-12
    • 2020-08-16
    • 2011-02-18
    • 2019-07-12
    • 2010-09-24
    • 2013-11-23
    相关资源
    最近更新 更多