Javascript NodeJS卡在cryto.pbkdf2Sync函数上

Javascript NodeJS卡在cryto.pbkdf2Sync函数上,javascript,node.js,mean-stack,cryptojs,Javascript,Node.js,Mean Stack,Cryptojs,因此,我在一个平均堆栈应用程序中使用随机salt字符串和密码字符串生成密码哈希。程序成功地生成了随机盐并在控制台上打印出来。但是,它在pbkdf2Sync函数处卡住,无法前进 这是我的代码: const crypto = require('crypto'); UserSchema.methods.setPassword = function(password){ console.log('start'); this.salt = crypto.randomBytes(16).toStr

因此,我在一个平均堆栈应用程序中使用随机salt字符串和密码字符串生成密码哈希。程序成功地生成了随机盐并在控制台上打印出来。但是,它在pbkdf2Sync函数处卡住,无法前进

这是我的代码:

const crypto = require('crypto');

UserSchema.methods.setPassword = function(password){
  console.log('start');
  this.salt = crypto.randomBytes(16).toString('hex');
  console.log(this.salt);
  this.hash = crypto.pbkdf2Sync(new Buffer.alloc(password),  new Buffer.alloc(this.salt), 1000, 64, 'sha512').toString('hex');
  console.log(this.hash);
};
输出结果如下:

start
ac09ae82b1fbb5b01257b5fa72bfc8614
然后程序就卡在这里了

据我所知,这个函数并没有被弃用。我应该如何继续

const crypto=require('crypto');
常量哈希=(密码)=>{
console.log('start');
const salt=crypto.randomBytes(16).toString('hex');
控制台日志(salt);
常量哈希=加密
.pbkdf2Sync(
新缓冲区.alloc(密码.length),
新缓冲区alloc(盐长度),
1000,
64,
‘sha512’
)
.toString('hex');
console.log(散列);
};
散列(“你好世界”);
这对我来说很有效,本质上
alloc
是寻找字节数(要在内存中分配的大小),字符串在这里不起作用

如果希望使用
密码
salt
作为已填充的缓冲区(带值),则在使用密码的情况下,使用第二个参数(
填充
):
新建缓冲区.alloc(password.length,password)

相反,使用
.length
返回字节数(字符串大小),这将生成“正确”的输出:

开始
55387a56bd8ff87ac05be698d938ef04
ab3d65e9e6341a924c752a77b8dc6b78f1e6db5d31df7dd0cc534039dd9662a97bcaf0b959fe78248a49859c7952ddb25d66840f052b27ef1ab60b9446c0c9fd

参考:

神奇的东西!在第二次检查时,请使用fill参数,否则加密将不会使用您的实际值,这是我方面的一个疏忽,这是最好的。