我们正在尝试将我们当前的项目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
我们已经尝试添加任何摘要选项(因为现在需要)但找不到匹配的
也许我们应该改变更多的东西?有人可以帮忙吗?
答案 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