Saltar al contenido

Token aleatorio seguro en Node.js

Este team redactor ha estado largas horas investigando respuestas a tu duda, te compartimos la respuesta por esto deseamos que sea de mucha apoyo.

Solución:

Prueba crypto.randomBytes():

require('crypto').randomBytes(48, function(err, buffer) 
  var token = buffer.toString('hex');
);

La codificación ‘hexadecimal’ funciona en el nodo v0.6.x o posterior.

Opción síncrona en caso de que no seas un experto en JS como yo. Tuve que dedicar algo de tiempo a cómo acceder a la variable de función en línea

var token = crypto.randomBytes(64).toString('hex');

0. Uso de la biblioteca de terceros nanoid [NEW!]

Un pequeño, seguro, compatible con URL, único string Generador de ID para JavaScript

https://github.com/ai/nanoid

import  nanoid  from "nanoid";
const id = nanoid(48);

1. Codificación Base 64 con URL y alfabeto seguro de 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 el devuelto string la longitud no coincidirá con el argumento de tamaño (tamaño != longitud final).

2. Valores aleatorios criptográficos de un conjunto limitado de caracteres

Tenga en cuenta que con esta solución el aleatorio generado string no se distribuye uniformemente.

También puede construir un fuerte aleatorio string 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.

Comentarios y valoraciones

Más adelante puedes encontrar las explicaciones de otros creadores, tú asimismo puedes insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *