6

パスワードのハッシュに node.js で pbkdf2 を使用しています。

私の問題は、認証の要求に応答していて、渡された資格情報が正しいかどうかを認証している最中であることです。pbkdf2 はかなりの時間がかかる可能性があるため (反復のサイズによっては) 非同期であると推測しています。ただし、残りの認証ロジックを別のメソッドに移動してコールバックを利用するのは少し見苦しく思えます。

タイマーを使用するか、連続するすべての認証ロジックを別の関数にスローするよりも良いアプローチはありますか? コールバックを使用する必要があると言う人がほとんどであることはわかっていますが、私の使用例では、これは意味がありません。渡されたパスワードに pbkdf2 を適用するまで、認証を続行できません。

4

2 に答える 2

8

Node.js crypto docsによると、PBKDF2 関数には非同期バージョンと同期バージョンの両方があります。

crypto.pbkdf2(パスワード、ソルト、繰り返し、キーレン、コールバック)

非同期 PBKDF2 は、疑似乱数関数 HMAC-SHA1 を適用して、指定されたパスワード、ソルト、反復から指定された長さのキーを導き出します。コールバックは 2 つの引数を取得します(err, derivedKey)

crypto.pbkdf2Sync(パスワード、ソルト、繰り返し、キーレン)

同期 PBKDF2 関数。派生キーを返すか、エラーをスローします。

于 2013-03-25T04:23:19.830 に答える
5

あなたの問題には2つの解決策があります。

最初の 1 つは、ライブラリを使用して非同期呼び出しをラップすることです。node-syncまたはnode-promiseを試すことができます。node-syncあなたが望むものにより適しています。

2 番目の解決策は、crypto の代わりにbcryptを使用することです。

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

bcryptノードでパスワードをハッシュするための特別なライブラリです。組み込みの暗号化モジュールよりも安全で、 や などの便利なメソッドを提供しhashSyncますcompareSync

于 2013-01-09T13:59:16.827 に答える