0. Uso de la biblioteca de terceros nanoid [¡NUEVO!]
Un generador de ID de cadena único, pequeño, seguro, amigable con URL para JavaScript
https://github.com/ai/nanoid
import { nanoid } from "nanoid";
const id = nanoid(48);
1. Codificación Base 64 con alfabeto seguro de URL y nombre de archivo
La página 7 de RCF 4648 describe cómo codificar en base 64 con seguridad de URL. Puede usar una biblioteca existente como base64url para hacer el trabajo.
La función será:
var crypto = require('crypto');
var base64url = require('base64url');
/** Sync */
function randomStringAsBase64Url(size) {
return base64url(crypto.randomBytes(size));
}
Ejemplo de uso:
randomStringAsBase64Url(20);
// Returns 'AXSGpLVjne_f7w5Xg-fWdoBwbfs' which is 27 characters length.
Tenga en cuenta que la longitud de la cadena devuelta no coincidirá con el argumento de tamaño (tamaño! = Longitud final).
2. Valores criptográficos aleatorios de un conjunto limitado de caracteres
Tenga en cuenta que con esta solución la cadena aleatoria generada no se distribuye uniformemente.
También puede crear una cadena aleatoria fuerte a partir de un conjunto limitado de caracteres como ese:
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');
}
Ejemplo de uso:
randomAsciiString(20);
// Returns 'rmRptK5niTSey7NlDk5y' which is 20 characters length.
randomString(20, 'ABCDEFG');
// Returns 'CCBAAGDGBBEGBDBECDCE' which is 20 characters length.