0. การใช้ไลบรารีของบุคคลที่สาม nanoid [ใหม่!]
เครื่องมือสร้างสตริง ID ที่ไม่ซ้ำใครและปลอดภัยและเป็นมิตรกับ URL สำหรับ JavaScript
https://github.com/ai/nanoid
import { nanoid } from "nanoid";
const id = nanoid(48);
1. การเข้ารหัสฐาน 64 ด้วย URL และตัวอักษรที่ปลอดภัยของชื่อไฟล์
หน้า 7 ของ RCF 4648อธิบายวิธีเข้ารหัสในฐาน 64 พร้อมความปลอดภัยของ URL คุณสามารถใช้ไลบรารีที่มีอยู่เช่น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.
โปรดทราบว่าความยาวสตริงที่ส่งคืนจะไม่ตรงกับอาร์กิวเมนต์ขนาด (ขนาด! = ความยาวสุดท้าย)
2. Crypto สุ่มค่าจากชุดอักขระที่ จำกัด
ระวังด้วยวิธีนี้สตริงสุ่มที่สร้างขึ้นจะไม่กระจายอย่างสม่ำเสมอ
คุณยังสามารถสร้างสตริงแบบสุ่มที่แข็งแกร่งจากชุดอักขระที่ จำกัด เช่นนั้น:
var crypto = require('crypto');
/** Sync */
function randomString(length, chars) {
if (!chars) {
throw new Error('Argument \'chars\' is undefined');
}
var charsLength = chars.length;
if (charsLength > 256) {
throw new Error('Argument \'chars\' should not have more than 256 characters'
+ ', otherwise unpredictability will be broken');
}
var randomBytes = crypto.randomBytes(length);
var result = new Array(length);
var cursor = 0;
for (var 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.