Lección 6

Errores comunes con Base64

Alfabeto incorrecto, saltos de línea, decodificar texto UTF-8 de forma errónea.

Los escollos de Base64 se agrupan en cuatro temas: desajustes de alfabeto, sorpresas con espacios en blanco, doble codificación y manejar mal texto UTF-8 frente a bytes en bruto.

Sopa de alfabetos

Síntomas:

  • fallos intermitentes de decodificación cuando se mezclan -/_ (URL-safe) y +// (estándar)
  • fragmentos con aspecto JWT pegados que aún contienen + o / donde la especificación esperaba Base64URL

Remediación: centraliza conversiones; escribe tests unitarios que afirmen fidelidad de ida y vuelta para muestras canónicas (MIME con relleno, vectores URL-safe sin relleno).

Evita «arreglos» con regex dispersos por servicios — eventualmente una ruta olvida recortar o normaliza mal.

Peculiaridades de sensibilidad a mayúsculas

La capitalización del alfabeto importa para índices de segmentos A–Z vs a–z; un .toLowerCase() accidental sobre todo el payload destruye información.

Espacios en blanco y saltos de línea persistentes

Copiar desde PDFs/correo suele inyectar espacios sueltos y saltos suaves.

Estrategias:

  • decodifica con flag de biblioteca ignoreWhitespace solo cuando la especificación lo permita
  • el parsing PEM elimina líneas de cabecera/pie — no espacios interiores arbitrarios de forma fiable
  • el pipeline de logs puede dividir registros — rechaza fragmentos sospechosamente cortos

Trata espacios Unicode invisibles (espacio fino sin separación, BOM) como bugs: normaliza la entrada pronto con lista de permitidos explícita.

Bugs de orden de decodificación URL

Aplicar percent-decoding dos veces o intercambiar el orden frente a normalización Base64 produce bytes basura — especialmente %2B, %2F, %3D (equivalentes de +, /, =).

Ejercita la ruta: tokens enviados por usuarios a través de múltiples proxies — captura la consulta en bruto antes de que los frameworks muten espacios.

Escalera accidental de doble codificación

Alguien codifica JSON de credenciales en Base64, recibe la cadena, codifica en Base64 otra vez por error, la guarda en BD — el artefacto almacenado ya no coincide con las suposiciones de ninguna parte.

Establece nomenclatura en código (encodeOnce, aclara responsabilidades por capa) y logs de aserción que impriman longitud + primeros caracteres del alfabeto hasheados para diff forense sin filtrar secretos.

Confusión con texto UTF-8

«Codificaste mal mi cadena en chino en Base64.» Frecuentemente el fallo es una mezcla de capas: alguien codificó bytes UTF-8 de la cadena pero decodificó al charset equivocado, o comparó contra una normalización distinta del mismo texto lógico.

Usa helpers de tu lenguaje que hagan explícito el pipeline: cadena Unicode → bytes UTF-8 → texto Base64, y la inversa al decodificar.

Nunca asumas un default legacy de un solo byte — las páginas de código de plataforma han producido históricamente mojibake tras decodificar.

Payloads JSON

JSON requiere UTF-8 (o alternativas documentadas con escapes pesados). Codifica bytes JSON serializados, no divergencia de pretty-print textual con diferencias BOM frente a normalización del servidor.

Columnas de texto vs binario en base de datos

Guardar protobuf decodificado de Base64 en columna tipada TEXT con transformaciones de collation puede corromper sutilmente — inapropiado pero observado cuando la coerción ORM etiqueta mal los tipos.

Notas al pie de seguridad

Los blobs Base64 son opacos para ojos casuales, no confidenciales. Enviar secretos solo codificados en Base64 equivale a texto plano en transportes no confiables.

Firmas y MACs operan sobre diseños de bytes canónicos — cambiar forma de relleno o capitalización invalida la verificación silenciosamente.

Escollos de tiempo constante

Raro pero real: comparaciones ingenuas de igualdad de cadenas sobre secretos derivados de Base64 frente a ataques de timing — prefiere primitivas de comparación segura de bibliotecas criptográficas al manejar tokens en bruto — no es problema de invención Base64 pero es adyacente.

Idea clave

La interoperabilidad gana cuando los equipos acuerdan:

  1. Reglas de alfabeto y relleno
  2. Normalización pre-decodificación (pasos de salto de línea/URL)
  3. Si el contenido es textual (UTF-8) u opaco en bytes
  4. Sin codificación recursiva sin capas de protocolo documentadas

Establece vectores dorados en CI para detectar regresiones pronto. Usa la herramienta Base64 para reproducir casos problemáticos localmente.

Volver al resumen del curso