1. nanoid サードパーティ ライブラリの使用 [NEW!]
JavaScript 用の小さくて安全な URL フレンドリーな一意の文字列 ID ジェネレーター
https://github.com/ai/nanoid
import { nanoid } from "nanoid";
const id = nanoid(48);
2. URL およびファイル名セーフ アルファベットを使用した Base 64 エンコーディング
RCF 4648 の 7 ページには、URL の安全性を備えた Base 64 でエンコードする方法が記載されています。base64urlのような既存のライブラリを使用してジョブを実行できます。
関数は次のようになります。
var crypto = require('crypto');
var base64url = require('base64url');
/** Sync */
function randomStringAsBase64Url(size) {
return base64url(crypto.randomBytes(size));
}
使用例:
randomStringAsBase64Url(20);
// Returns 'AXSGpLVjne_f7w5Xg-fWdoBwbfs' which is 27 characters length.
返される文字列の長さが size 引数と一致しないことに注意してください (size != 最終的な長さ)。
3. 限られた文字セットからの暗号ランダム値
このソリューションでは、生成されたランダム文字列が均一に分散されないことに注意してください。
次のような限られた文字セットから強力なランダム文字列を作成することもできます。
var crypto = require('crypto');
/** Sync */
function randomString(length, chars) {
if (!chars) {
throw new Error('Argument \'chars\' is undefined');
}
const charsLength = chars.length;
if (charsLength > 256) {
throw new Error('Argument \'chars\' should not have more than 256 characters'
+ ', otherwise unpredictability will be broken');
}
const randomBytes = crypto.randomBytes(length);
let result = new Array(length);
let cursor = 0;
for (let i = 0; i < length; i++) {
cursor += randomBytes[i];
result[i] = chars[cursor % charsLength];
}
return result.join('');
}
/** Sync */
function randomAsciiString(length) {
return randomString(length,
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');
}
使用例:
randomAsciiString(20);
// Returns 'rmRptK5niTSey7NlDk5y' which is 20 characters length.
randomString(20, 'ABCDEFG');
// Returns 'CCBAAGDGBBEGBDBECDCE' which is 20 characters length.