Javascript Node';s crypto.pbkdf2()应该工作吗?
关于节点加密模块的pbkdf2()函数,我已经阅读了很多文档。我之前提出的一个问题没有经过深思熟虑就被打断了——所以让我这么说:我认为我对回调缺乏了解——但我已经阅读了许多试图真正理解回调的参考资料——YDKJS Async,MDN,O'Reilly的“Learning JavaScript” 我在回调中的else子句中有一个console.log语句,它适当地记录了日志,因此我确信回调正在执行,尽管我的调试程序(在VSCode中)没有停止执行 我尝试了两种不同的方法,如下面的代码所示:一种是在else子句中声明一个变量并将其值更改为derivedKey.toString('hex'),另一种是返回derivedKey.toString('hex')。两者都不起作用 我尝试链接then子句,但crypto.pbkdf2返回void并且“property”then“在类型“void”上不存在” 以下是书面方法:Javascript Node';s crypto.pbkdf2()应该工作吗?,javascript,node.js,typescript,callback,Javascript,Node.js,Typescript,Callback,关于节点加密模块的pbkdf2()函数,我已经阅读了很多文档。我之前提出的一个问题没有经过深思熟虑就被打断了——所以让我这么说:我认为我对回调缺乏了解——但我已经阅读了许多试图真正理解回调的参考资料——YDKJS Async,MDN,O'Reilly的“Learning JavaScript” 我在回调中的else子句中有一个console.log语句,它适当地记录了日志,因此我确信回调正在执行,尽管我的调试程序(在VSCode中)没有停止执行 我尝试了两种不同的方法,如下面的代码所示:一种是在
private静态异步hashPassword(密码:string,salt:string):Promise{
var hashedPassword;
常数迭代=50000;
常数keylen=64;
常量摘要='sha512';
const possibleReturnedValue=wait crypto.pbkdf2(密码、salt、迭代、keylen、摘要、(err、derivedKey)=>{
if(err){throw err;}
否则{
console.log(derivedKey.toString('hex'));
console.log(“嘿,现在”);
hashedPassword=derivedKey.toString('hex');
返回derivedKey.toString('hex');
}
})
返回hashedPassword;
}
您的问题是crypto.pbkdf2
函数有点旧,不适用于承诺,而是使用回调。因此,为了在现代异步代码中使用该函数,有必要将该函数包装在Promise
对象中
关键思想是调用promise的构造函数在回调中给出的resolve
和reject
函数
重构以返回承诺,您的函数将如下所示:
函数hashPassword(密码:string,salt:string):承诺{
返回新承诺((解决、拒绝)=>{
常数迭代=50000;
常数keylen=64;
常量摘要='sha512';
pbkdf2(密码,salt,迭代,keylen,摘要,(err,key)=>{
如果(错误){
拒绝(错误);
}否则{
解析(key.toString('hex'));
}
})
});
}