繁体   English   中英

crypto.pbkdf2是异步的,我如何将其视为同步?

[英]crypto.pbkdf2 is asynchronous, how do I treat it as synchronous?

我在node.js中使用pbkdf2来进行散列密码。

我的问题是我正在响应身份验证请求,而我正在验证传递的凭据是否正确。 我假设pbkdf2是异步的,因为它可能需要花费大量时间(取决于迭代的大小)。 然而,将剩余的身份验证逻辑移动到一个单独的方法来利用回调似乎有点难看。

有没有比使用定时器或将所有连续的认证逻辑投入单独的函数更好的方法? 我知道大多数人会说我应该使用回调,但在我的用例中这没有意义。 在将pbkdf2应用于传递的密码之前,我无法继续身份验证。

根据Node.js加密文档 ,有一个PBKDF2函数的异步和同步版本。

crypto.pbkdf2(密码,盐,迭代,keylen,回调)

异步PBKDF2应用伪随机函数HMAC-SHA1从给定密码,salt和迭代中导出给定长度的密钥。 回调有两个参数(err, derivedKey)

crypto.pbkdf2Sync(密码,盐,迭代,keylen)

同步PBKDF2功能。 返回derivedKey或throws错误。

我可以看到两个解决方案。

第一个是使用一些库来包装异步调用。 您可以尝试node-syncnode-promise node-sync更适合您想要的。

第二种解决方案是使用bcrypt而不是crypto:

var bcrypt = require('bcrypt');
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync(password, salt);

bcrypt是节点中用于密码散列的特殊库。 它比内置加密模块更安全,并提供一些有用的方法,如hashSynccompareSync

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM