Base62 vs Base64: los identificadores no son flujos de bytes arbitrarios

Descubra por qué son importantes el orden alfabético Base62 y las reglas de ceros iniciales, y cuándo Base64URL es un mejor formato de intercambio.

Base62 comúnmente usa dígitos y letras mayúsculas y minúsculas. Eso lo hace atractivo para identificadores compactos sin puntuación. Base64 utiliza 64 símbolos y empaqueta grupos de bits directamente. Aunque los nombres son similares, las implementaciones de Base62 a menudo modelan la entrada como un número, lo que crea diferentes cuestiones de interoperabilidad.

El orden alfabético es parte del formato.

Dos bibliotecas Base62 pueden elegir diferentes órdenes para dígitos, letras mayúsculas y letras minúsculas. La misma cadena visible representa números diferentes. Un sistema que utiliza 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz no está de acuerdo con uno que coloca las letras minúsculas primero. Registre el alfabeto y los vectores de prueba en el protocolo; “Base62” por sí sola no es suficiente.

La distinción entre mayúsculas y minúsculas también importa. Un proxy en minúsculas, una intercalación de base de datos que no distingue entre mayúsculas y minúsculas o un identificador normalizado manualmente pueden cambiar su valor. Si su capa de almacenamiento ignora mayúsculas y minúsculas, ni Base62 ordinario ni Base64 son una representación segura sin una decisión de diseño adicional.

Preservar la longitud al codificar bytes

Considere dos archivos que contienen formato hexadecimal. 01 y 0001. Interpretados como enteros sin signo, ambos tienen valor uno. Una conversión simple de entero a Base62 pierde la distinción. Un formato Base62 orientado a bytes necesita un manejo explícito de ceros iniciales o un campo de longitud. Esto es especialmente relevante para tokens aleatorios y valores criptográficos de longitud fija.

const a = BigInt('0x01');
const b = BigInt('0x0001');
console.log(a === b); // true: numeric equality loses byte length

Elija según lo que significa el valor

Si está acortando un número entero de base de datos bajo el control de una aplicación, un alfabeto Base62 documentado puede ser conveniente. Si transporta bytes arbitrarios entre sistemas independientes, Base64URL generalmente proporciona un contrato estandarizado más claro. Sustituye el guión y el guión bajo por la puntuación estándar Base64 manteniendo la misma agrupación de seis bits.

La codificación no es aleatorización. Los enteros secuenciales siguen siendo predecibles después de la conversión a Base62. Si los identificadores necesitan resistirse a las conjeturas, genere suficiente entropía impredecible utilizando una fuente aleatoria criptográfica y luego codifique los bytes resultantes sin perder longitud. No trate un token de aspecto compacto como prueba de que su generación es segura.

Al comparar tamaños de salida, incluya prefijos, reglas de relleno y metadatos de cualquier longitud. Ida y vuelta al menos con una entrada vacía, un byte cero, varios ceros a la izquierda y un byte de alto valor. El alfabeto Base64URL está estandarizado en RFC 4648; una aplicación Base62 debe especificar los detalles adicionales por sí misma.