我在 node.js 中使用 pbkdf2 来散列密码。
我的问题是我正在响应身份验证请求,并且我正在验证传递的凭据是否正确。我假设 pbkdf2 是异步的,因为它可能需要大量时间(取决于迭代的大小)。然而,将剩余的身份验证逻辑移动到一个单独的方法中以利用回调似乎有点难看。
有没有比使用计时器或将所有连续的身份验证逻辑放入单独的函数更好的方法?我知道大多数人会说我应该使用回调,但在我的用例中这没有任何意义。在将 pbkdf2 应用于传递的密码之前,我无法继续进行身份验证。
我在 node.js 中使用 pbkdf2 来散列密码。
我的问题是我正在响应身份验证请求,并且我正在验证传递的凭据是否正确。我假设 pbkdf2 是异步的,因为它可能需要大量时间(取决于迭代的大小)。然而,将剩余的身份验证逻辑移动到一个单独的方法中以利用回调似乎有点难看。
有没有比使用计时器或将所有连续的身份验证逻辑放入单独的函数更好的方法?我知道大多数人会说我应该使用回调,但在我的用例中这没有任何意义。在将 pbkdf2 应用于传递的密码之前,我无法继续进行身份验证。
根据Node.js 加密文档,PBKDF2 函数有异步和同步版本。
crypto.pbkdf2(密码、盐、迭代、keylen、回调)
异步 PBKDF2 应用伪随机函数 HMAC-SHA1 从给定的密码、盐和迭代中导出给定长度的密钥。回调有两个参数
(err, derivedKey)
。crypto.pbkdf2Sync(密码,盐,迭代,keylen)
同步 PBKDF2 函数。返回 derivedKey 或抛出错误。
对于您的问题,我可以看到两种解决方案。
第一个是使用一些库来包装异步调用。您可以尝试node-sync或node-promise。node-sync
更适合您想要的。
第二种解决方案是使用bcrypt而不是加密:
var bcrypt = require('bcrypt');
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync(password, salt);
bcrypt
是 node.js 中用于密码哈希的特殊库。它比内置加密模块更安全,并提供一些有用的方法,如hashSync
和compareSync
。