1.使用nanoid第三方库[新!]
一个小巧的、安全的、URL 友好的、独特的 JavaScript 字符串 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.
请注意,返回的字符串长度将与大小参数不匹配(大小!= 最终长度)。
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.