在节点6中使用crypto.pbkdf2Sync返回不同的散列然后node4

时间:2016-11-02 10:50:35

标签: javascript node.js authentication

我们正在尝试将我们当前的项目nodeJS版本(4.2.4)升级到最新版本(6.9.1),我们遇到了这样的问题,我们在用户密码上有一些经过验证的方法,它做了这样的事情:

    return this.password === crypto.pbkdf2Sync(password, this.salt, 10000, 64).toString('base64');

this.password是用于节点4.2.4和。的用户密码哈希 密码是用户输入,

因为我们升级到节点6.9.1它停止工作并返回false,在节点4.2.4中它返回true

我们已经尝试添加任何摘要选项(因为现在需要)但找不到匹配的

也许我们应该改变更多的东西?有人可以帮忙吗?

  • 请注意,在节点5中,它可以正常工作而不会更改代码

1 个答案:

答案 0 :(得分:4)

您需要将代码更改为:

crypto.pbkdf2Sync(password, new Buffer(this.salt, 'binary'), 10000, 64).toString('base64');
从节点6

默认盐不是二进制

您还需要添加摘要,例如:

crypto.pbkdf2Sync(password, new Buffer(this.salt, 'binary'), 10000, 64, 'DSA-SHA1').toString('base64')

请在此处查看API: https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest