Node の標準ライブラリに Crypto モジュールが必要です。登録フォームを処理するこの POST ルートがあります。
app.post('/superadmin/add-account', function(req, res) {
// Shorthand variable
var doc = req.body;
crypto.randomBytes(32, function(err, buf) {
if (err) throw err;
// Sanitise and transform user input
...
// Validate user input
...
var errors = validator.getErrors();
// Generate new object data
doc.salt = buf;
doc.pass = doc.salt + 'justForNow';
console.log(doc);
ドキュメント (req.body) を出力すると、奇妙な値が表示されるようになりました... コンソールに出力される buf は、ほとんどが疑問符の付いたボックスに似た文字で構成されています。これは正しいです?しかし、bufをdoc.saltに保存してこれを出力すると、完全に別のものを取得します...「Slowbuffer ae be C5 A3 E3 ....など」
Q1: crypto.randomBytes() によって生成されたソルトを使用して文字列と連結したり保存したりする前に、何か特別なことをする必要がありますか?
Q2: crypto.randomBytes() 関数には非同期バージョンと同期バージョンがあります。非同期バージョンを使用していますが、その理由が本当にわかりませんか? =PI は、非同期コールバックは、時間がかかる可能性のある I/O 操作を処理するときに主に使用されると考えていました...または、この関数のコールバック バージョンを使用しているのでしょうか。これは、実際には時間がかかり、一部の MS のためにシステムをロックする複雑なプロセスであるためです。同期バージョンを使用する場合
Q3:私はまだそこにいませんが、ソルト + パスワードをハッシュするために The Crypto モジュールのハッシュ関数を使用してこのコードを続行し、それを DB に保存します。次のような var を作成する必要があることはわかっています。
var sha256 = crypto.createHash('sha256');
しかし、私は今これをどのように使用しているか理解していません。