Identificadores Únicos y Criptografía Web
En el desarrollo de aplicaciones web es habitual requerir identificadores únicos para registros, claves de estado en interfaces de usuario (como listas en React) o tokens de sesión.
Históricamente se recurría a librerías externas como uuid o al antipatrón Math.random().toString(36), que no es criptográficamente seguro ni garantiza unicidad.
Hoy en día, la API web estándar crypto está disponible globalmente en todos los navegadores modernos y en Node.js (v19+).
1. Generación de UUIDs con crypto.randomUUID() #
El método crypto.randomUUID() genera un identificador único universal (UUID v4) de 128 bits criptográficamente seguro según el estándar RFC 4122:
1// Generar un UUID v4 2const idTransaccion = crypto.randomUUID(); 3console.log(idTransaccion);Salida de consola f47ac10b-58cc-4372-a567-0e02b2c3d479
Ejemplo de uso en Modelado de Entidades: #
1function crearUsuario(nombre, email) { 2 return { 3 id: crypto.randomUUID(), // Generación nativa sin dependencias 4 nombre, 5 email, 6 creadoEn: new Date().toISOString(), 7 }; 8} 9 10const nuevoUsuario = crearUsuario("Elena", "elena@example.com"); 11console.log(`Usuario creado con ID: ${nuevoUsuario.id}`);
2. Valores Aleatorios Criptográficos con crypto.getRandomValues() #
Para generar números o bytes aleatorios de alta entropía (por ejemplo, para generar tokens o claves de cifrado):
1// Crear un array de 16 bytes (128 bits) 2const bytesAleatorios = new Uint8Array(16); 3crypto.getRandomValues(bytesAleatorios); 4 5// Convertir a cadena hexadecimal 6const tokenHex = Array.from(bytesAleatorios, b => b.toString(16).padStart(2, "0")).join(""); 7console.log("Token de seguridad generado:", tokenHex);
3. Comparación: crypto.randomUUID() vs Math.random() #
| Característica | crypto.randomUUID() | Math.random() |
|---|---|---|
| Seguridad Criptográfica | Sí (CSPRNG); adecuado para tokens y seguridad. | ❌ No; algoritmo pseudoaleatorio predecible. |
| Garantía de Unicidad | Colisiones estadísticamente imposibles ( posibilidades). | Alto riesgo de colisión al generar múltiples IDs. |
| Dependencias | Nativo en el lenguaje/navegador. | Nativo, pero limitado a números flotantes . |
Resumen del tema
Conceptos clave #
crypto.randomUUID(): genera cadenas UUID v4 estandarizadas (36 caracteres) con entropía criptográfica de forma nativa.crypto.getRandomValues(): llena arrays tipados (Uint8Array) con valores aleatorios criptográficamente seguros.- Reemplazo de Librerías: elimina la necesidad de instalar dependencias externas como el paquete
uuidde npm.
Qué debes recordar #
Usa crypto.randomUUID() para generar identificadores únicos y claves primarias en el frontend y backend de forma segura y sin dependencias externas.