Node的crypto.pbkdf2()应该如何工作?

编程入门 行业动态 更新时间:2024-10-13 04:18:55

Node的crypto.pbkdf2()应该如何<a href=https://www.elefans.com/category/jswz/34/1771444.html style=工作?"/>

Node的crypto.pbkdf2()应该如何工作?

我已经阅读了很多有关Node crypto模块的pbkdf2()函数的文档。我之前提出的一个问题没有经过深思熟虑就被折叠了-所以让我这样说:我认为我对回调没有足够的了解-但是我已经读了很多试图真正理解它的资源-YDKJS Async,MDN,“学习JavaScript “由O'Reilly提供。

我在适当记录的回调函数的else子句中有一个console.log语句,因此尽管我的调试程序(在VSCode中)没有停止执行,但是我确定该回调函数正在执行。

我尝试了两种不同的方法,如下面的代码所示:一种是声明一个变量并将其值更改为else子句中的derivedKey.toString('hex'),另一种是返回derivedKey.toString。 (“十六进制”)。都不起作用。

我尝试链接一个then子句,但是crypto.pbkdf2返回void,并且“ void”类型不存在属性'then'。

这里是书面方法:

    private static async hashPassword(password:string, salt:string):Promise<string> {
        var hashedPassword;

        const iterations = 50000;
        const keylen = 64;
        const digest = 'sha512';
        const possibleReturnedValue = await crypto.pbkdf2(password, salt, iterations, keylen, digest, (err, derivedKey) => {
            if (err) {throw err;}
            else {
                console.log(derivedKey.toString('hex'));
                console.log("Hey now");
                hashedPassword = derivedKey.toString('hex');
                return derivedKey.toString('hex');
            }
        })
        return hashedPassword;
    }
回答如下:

您的问题是crypto.pbkdf2函数有些陈旧,并且不能使用promise而是使用回调。因此,为了在现代异步代码中使用此函数,必须将该函数包装在Promise对象中。

关键思想是在回调中调用promise的构造函数提供的resolvereject函数。

重构为返回承诺,您的函数将如下所示:

function hashPassword(password:string, salt:string):Promise<string> {
    return new Promise((resolve, reject) => {
        const iterations = 50000;
        const keylen = 64;
        const digest = 'sha512';

        crypto.pbkdf2(password, salt, iterations, keylen, digest, (err, key) => {
            if (err) {
                reject(err);
            } else {
                resolve(key.toString('hex'));
            }
        })
    });
}

更多推荐

Node的crypto.pbkdf2()应该如何工作?

本文发布于:2024-05-07 20:51:58,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:工作   Node   crypto

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!