Tech

Generador de strings aleatorios

Generá cadenas aleatorias con el alfabeto y longitud que necesites. Útil para tokens, slugs, IDs cortos, datos de prueba y nombres de archivos únicos.

Cuándo usar un string aleatorio

Los strings aleatorios cumplen funciones muy distintas según el contexto. No son lo mismo que una contraseña, aunque por dentro se generan igual. Casos típicos:

  • Tokens internos: claves de invitación a un beta, links de descarga firmados, tokens de reset de contraseña.
  • IDs cortos: alternativa a UUID cuando importa la legibilidad o el largo (slugs en URLs, IDs visibles).
  • Nombres de archivo únicos: para evitar colisiones al subir a S3, R2 o GCS.
  • Datos de prueba: rellenar campos de texto en seeds y fixtures sin que se vean realistas.
  • Códigos de cupón: cuando querés algo más corto que un UUID pero igual seguro.

Cómo elegir el alfabeto

El alfabeto afecta la legibilidad, la entropía por caracter y dónde podés usar el string.

  • Solo dígitos (10): 3.32 bits/caracter. Para códigos de un solo uso (OTP).
  • Alfanumérico minúsculas (36): 5.17 bits/caracter. Bueno para slugs en URLs.
  • Base62 (62): 5.95 bits/caracter. Estándar para IDs cortos y tokens.
  • Hexadecimal (16): 4 bits/caracter. Compatible con casi todo.
  • Con símbolos (~95): 6.57 bits/caracter. Solo cuando el destino los soporta.

Cómo se calcula la entropía

La fórmula es bits = longitud × log2(N), donde N es el tamaño del alfabeto. Algunos ejemplos prácticos:

  1. 16 caracteres alfanuméricos = 95 bits. Suficiente para cualquier token interno.
  2. 21 caracteres base62 = 125 bits. El default de nanoid.
  3. 32 hex = 128 bits. Equivale a un UUID v4.
  4. 43 base62 = 256 bits. Para claves maestras de cifrado.

Por debajo de 64 bits, asumí que un atacante puede romperlo. Por encima de 128 bits, está fuera de alcance incluso con cómputo masivo.

Buenas prácticas para tokens

  • Si el token va en URL, evitá símbolos que requieran escapado.
  • Si lo van a leer humanos, evitá caracteres ambiguos (0, O, 1, l, I).
  • Guardá un hash si el token sirve para autenticar, no el texto plano.
  • Asociale una expiración real, no infinita.
  • Logueá uso (al menos creación, primer uso y último uso).

Cuándo NO usar este generador

No lo uses como contraseña principal de una cuenta humana: el generador de contraseñas está afinado para eso. Tampoco para identificadores que tengan que coordinarse entre sistemas distribuidos: ahí UUID v4 o v7 es la opción correcta. Y no lo uses para datos que necesiten ser estables: cada generación produce algo distinto, salvo que copies y pegues.

Preguntas frecuentes

¿Diferencia con el generador de contraseñas?

Este genera cadenas con cualquier alfabeto y longitud. El de contraseñas está optimizado para login humano con indicador de fortaleza.

¿Sirve como ID corto tipo nanoid?

Sí. Base62 con longitud 21 da ~125 bits, igual que nanoid por default.

¿Cómo se calcula la entropía?

bits = longitud × log2(tamaño del alfabeto). 16 caracteres con alfabeto de 36 ≈ 82 bits.

¿Puedo usarlo para passwords?

Sí, pero el generador específico de contraseñas tiene UI más afinada para ese caso.