Node.js でランダムな文字列を作成してみました

ランダムな文字列が必要になることがありまして、 Node.js で作成してみました。

環境

  • Node.js v8.9.4

Stack Overflow

“node.js random string” で検索したら、 Stack Overflow に次の回答が出てきました。

Try crypto.randomBytes():

require('crypto').randomBytes(48, function(err, buffer) {
  var token = buffer.toString('hex');
});

javascript - Secure random token in Node.js - Stack Overflow

crypto モジュールの randomBytes 関数でランダムなバイトが作れるようです。 それを、 toString で 8 進数の文字列にしているようです。

Node.js の API

Node.js の API も見てみました。

If the callback function is not provided, the random bytes are generated synchronously and returned as a Buffer. An error will be thrown if there is a problem generating the bytes.

// Synchronous
const buf = crypto.randomBytes(256);
console.log(
  `${buf.length} bytes of random data: ${buf.toString('hex')}`);

crypto.randomBytes(size[, callback])

Asynchronous の関数もあったのですが、これだけ実行するだけなので、 Synchronous の方を引用しました。 Stack Overflow とやっていることは一緒でした。

ワンライナー

ワンライナーで出力してみました。

$ node -p "require('crypto').randomBytes(256).toString('hex')"

8 進数の文字列ではなくて、 base64 の文字列で出力するようにしてみました。

$ node -p "require('crypto').randomBytes(256).toString('base64')"

終わり

一般的にはあまり使うところはないかな。