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
ignoreWhitespacesolo 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:
- Reglas de alfabeto y relleno
- Normalización pre-decodificación (pasos de salto de línea/URL)
- Si el contenido es textual (UTF-8) u opaco en bytes
- 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.