ランダムな文字列が必要になることがありまして、 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')}`);
Asynchronous の関数もあったのですが、これだけ実行するだけなので、 Synchronous の方を引用しました。 Stack Overflow とやっていることは一緒でした。
ワンライナー
ワンライナーで出力してみました。
$ node -p "require('crypto').randomBytes(256).toString('hex')"
8 進数の文字列ではなくて、 base64 の文字列で出力するようにしてみました。
$ node -p "require('crypto').randomBytes(256).toString('base64')"
終わり
一般的にはあまり使うところはないかな。