Cómo detectan los equipos el tipo de archivo: explicación de los 'magic bytes'
Por qué las extensiones de archivo son solo la mitad de la historia
La mayoría de la gente asume que un ordenador sabe que un archivo es un JPEG porque termina en .jpg. Es una suposición razonable, pero se equivoca más o menos la mitad de las veces. Las extensiones de archivo son solo una convención para nombrar archivos. Son una pista para el sistema operativo, no una garantía de lo que hay dentro. Si le cambias el nombre a un archivo PNG y le pones la extensión .txt, Windows intentará abrirlo tranquilamente en el Bloc de notas y te mostrará una pantalla llena de galimatías. Intenta abrir un documento de Word al que le hayas puesto la extensión .pdf y Adobe Acrobat se negará en rotundo. Esto importa muchísimo para la conversión de archivos. Cuando subes un archivo a un servicio como CocoConvert, el sistema no puede simplemente fiarse de la extensión. Alguien podría renombrar un ejecutable malicioso (.exe) a .jpg para burlar un gestor de archivos poco sofisticado. O, lo que es más común, un usuario podría simplemente guardar un archivo con la extensión incorrecta por accidente. Todos hemos visto descargas corruptas que pierden por completo los metadatos de su extensión. La solución, que se adoptó hace décadas, es ignorar el nombre del archivo y leer su contenido binario real. Específicamente, un programa lee los primeros bytes y los compara con una base de datos de firmas conocidas. Estas firmas se llaman 'magic bytes' o, más formalmente, firmas de archivo. Son la verdad absoluta sobre el contenido de un archivo, independientemente de su nombre.
Qué son realmente los 'magic bytes'
Cada formato de archivo estandarizado reserva sus primeros bytes para un identificador único. Estos bytes, escritos en hexadecimal, están integrados en la propia especificación del formato; no los añade el sistema operativo más tarde. Puedes verlos tú mismo con un editor hexadecimal. Echa un vistazo a algunos tipos de archivo comunes: - **Las imágenes JPEG** siempre empiezan con FF D8 FF. Los dos primeros bytes (FF D8) marcan el inicio del flujo de datos y el tercero (FF) comienza el primer segmento marcador. - **Las imágenes PNG** empiezan con una firma de 8 bytes: 89 50 4E 47 0D 0A 1A 0A. Fíjate en que la parte 50 4E 47 es 'PNG' en ASCII. - **Los archivos PDF** comienzan con 25 50 44 46, que es '%PDF' en ASCII. Puedes abrir cualquier PDF en un editor de texto plano y ver esto justo al principio. - **Los archivos ZIP** empiezan con 50 4B 03 04. Esto es 'PK' en ASCII, por Phil Katz, el creador del formato. Como los archivos DOCX, XLSX, PPTX y JAR se basan en ZIP, todos comparten esta firma. - **Los archivos de audio MP3** a menudo comienzan con FF FB o FF F3, que es la palabra de sincronización MPEG. - **Los archivos EXE** en Windows empiezan con 4D 5A ('MZ' en ASCII), por Mark Zbikowski, uno de los arquitectos originales de MS-DOS. El nombre 'magic bytes' proviene de la utilidad `file` de Unix, que ha utilizado una base de datos llamada `/etc/magic` (o `/usr/share/misc/magic` en sistemas modernos) desde la década de 1970. Cuando ejecutas `file foto.jpg` en una terminal, la utilidad lee los bytes iniciales, consulta su base de datos y te dice el tipo de archivo real, ignorando por completo la extensión .jpg.
Cómo lee la firma el software de detección
En teoría, leer los 'magic bytes' es simple. En la práctica, los casos límite te complicarán la vida. El proceso básico consiste en abrir el archivo como un flujo binario sin procesar, leer un pequeño búfer (a menudo los primeros 512 bytes) y comparar ese búfer con una lista de firmas conocidas. Sin embargo, algunos formatos requieren leer mucho más allá. La comparación no siempre es una simple coincidencia de prefijo. Algunos formatos colocan su firma en una posición fija. El formato de imagen de disco ISO, por ejemplo, tiene su firma 'CD001' a partir del byte 32.769. Los archivos ZIP pueden tener su directorio central al final del archivo, lo que obliga a algunos detectores a escanear desde el final en lugar del principio. Las librerías modernas como Apache Tika (Java), python-magic (Python) y libmagic (C) gestionan esta complejidad. Solo Apache Tika conoce más de 1300 tipos de archivo, detectando tipos MIME, codificaciones de caracteres e incluso metadatos incrustados. En CocoConvert, utilizamos la detección de firmas en el servidor como nuestra primera línea de defensa. Si el tipo MIME que declara tu navegador no coincide con lo que dice la firma binaria, el archivo se marca para una revisión más detallada antes de que comience cualquier conversión. Los formatos contenedores complican aún más las cosas. Un archivo DOCX y un archivo JAR empiezan ambos con 50 4B 03 04 porque ambos son archivos ZIP. Para distinguirlos, el software tiene que mirar más a fondo dentro del archivo en busca de ficheros específicos, como [Content_Types].xml para DOCX o META-INF/MANIFEST.MF para un JAR. Esta detección en dos pasos es una práctica estándar para cualquier sistema serio de manejo de archivos.
Cuándo fallan los 'magic bytes' (porque fallan)
Los 'magic bytes' son fiables, pero no son infalibles. Varios escenarios del mundo real pueden confundir la detección basada en firmas y darte respuestas incorrectas o ambiguas. **Los archivos truncados** son un dolor de cabeza constante. Si una descarga se interrumpe, podrías tener un archivo con una cabecera JPEG válida pero sin datos de imagen reales. La comprobación de la firma pasa, pero la conversión falla más tarde cuando el decodificador espera una imagen completa y solo encuentra un fragmento. **Los archivos manipulados intencionadamente** pueden explotar el hecho de que los 'magic bytes' solo cubren la cabecera. Un archivo puede tener una cabecera PNG válida seguida de un 'payload' malicioso. Este es un vector de ataque conocido llamado archivo políglota: un único binario que es válido simultáneamente como dos tipos de archivo diferentes. Hay investigadores que han creado archivos políglotas JPEG/JavaScript que un navegador ejecutará como un script mientras que un visor de imágenes lo muestra como una foto. La detección por firma por sí sola no los detectará. **Los conflictos de versiones de formato** crean otra capa de ambigüedad. Antes de 2007, los archivos de Microsoft Office (DOC, XLS, PPT) usaban el formato binario de documento compuesto (Compound Document Binary Format), que empieza con D0 CF 11 E0 A1 B1 1A E1. Los tres formatos comparten exactamente la misma firma. No puedes distinguir un .doc de un .xls o de un .ppt usando 'magic bytes'; tienes que analizar la estructura interna. **Los formatos de texto plano** como CSV, JSON, XML, HTML y Markdown no tienen 'magic bytes' en absoluto. Son solo secuencias de caracteres. La detección aquí depende del análisis heurístico: buscar patrones como los corchetes angulares (HTML/XML) o las llaves (JSON). Estas heurísticas pueden equivocarse. Cualquiera que haya lidiado con un 'CSV' que usa puntos y comas en lugar de comas conoce este suplicio demasiado bien. Si CocoConvert no puede identificar con seguridad un tipo de archivo, te lo dice. Creemos que devolver un error claro es mucho más útil que adivinar y producir un archivo corrupto.
Implicaciones prácticas para la conversión de archivos
¿Y cómo te ayuda esto? Cambia por completo la forma de solucionar los fallos de conversión. Cuando un servicio informa de un 'formato de archivo no compatible o no reconocido', el problema casi nunca es la extensión del nombre del archivo. Es el contenido. Aquí están los culpables más comunes y qué hacer al respecto: **El archivo es de un formato diferente al que crees.** Esto sucede mucho con las exportaciones de herramientas de diseño. Figma, por ejemplo, podría exportar un archivo etiquetado como .jpg que en realidad es un PNG. Tu mejor opción es abrir el archivo en un editor hexadecimal (como HxD en Windows o Hex Fiend en macOS) y comprobar los primeros bytes. Si ves 89 50 4E 47, es un PNG, sin importar el nombre. Cámbiale el nombre y vuelve a intentarlo. **El archivo está protegido por contraseña o tiene DRM.** Los documentos de Office cifrados siguen empezando con D0 CF 11 E0, por lo que la comprobación de la firma pasa. Pero el contenido interior está cifrado. CocoConvert no puede descifrar archivos protegidos por contraseña. No lo confundas con una limitación del servicio; es una característica de seguridad fundamental del propio cifrado. **El archivo es un contenedor con el contenido incorrecto.** Un archivo creado al renombrar un .zip genérico a .docx tendrá la firma correcta (50 4B), pero fallará en la conversión porque carece de la estructura XML de procesamiento de textos necesaria en su interior. El conversor abre el archivo, no encuentra nada con qué trabajar y se rinde. **Incompatibilidad de códecs en archivos de vídeo.** Un contenedor MKV (empieza con 1A 45 DF A3) puede contener vídeo codificado en H.264, H.265, AV1, VP9 o docenas de otros. Los 'magic bytes' confirman el contenedor MKV, no el códec del flujo de vídeo. Si CocoConvert admite MKV pero tu archivo usa un códec poco común como RealVideo 4, la detección inicial pasará pero el paso de transcodificación fallará.
Cómo comprobar el tipo real de un archivo sin software especializado
No necesitas instalar software especializado para verificar la identidad real de un archivo. Estos métodos funcionan en todos los sistemas operativos principales utilizando herramientas que ya tienes. **En Windows:** abre PowerShell y ejecuta `Format-Hex -Path 'C:\ruta\a\tuarchivo.ext' | Select-Object -First 3`. Este comando imprime los primeros 48 bytes en hexadecimal. Compara la primera fila de bytes con las firmas enumeradas anteriormente en este artículo. **En macOS y Linux:** abre la Terminal y ejecuta `xxd tuarchivo | head -3`. Esto muestra el desplazamiento de bytes, los valores hexadecimales y la representación ASCII. Mejor aún, simplemente ejecuta `file tuarchivo`. La utilidad `file` viene integrada y te da una respuesta limpia y legible para humanos al instante. **En un navegador, sin ninguna herramienta:** si estás en un equipo con restricciones en el que no puedes ejecutar comandos, ve a la página de detección de CocoConvert en cocoConvert.com/detect. Sube el archivo y nuestro servicio informará del tipo MIME detectado, los bytes de la firma con los que coincidió y su nivel de confianza. **En Python (para desarrolladores):** después de `pip install python-magic`, puedes ejecutar `import magic; print(magic.from_file('tuarchivo', mime=True))`. Esto da un tipo MIME estándar como `image/jpeg`. Sin embargo, mi consejo para el código Python en producción es usar la librería `filetype` en su lugar. No tiene dependencias del sistema, lo que hace que sea mucho más fácil de desplegar en Windows sin tener que pelearse con las DLL de libmagic. Conocer el tipo MIME real antes de subir un archivo ahorra mucho tiempo. Si el tipo detectado de un archivo no está en la lista de formatos de entrada admitidos por un servicio, sabes de inmediato que la conversión fallará.
Los límites de lo que cualquier servicio de conversión puede prometer
La detección por 'magic bytes' es un problema resuelto para los aproximadamente 200 formatos de archivo que cubren el 99 % del uso diario. Pero para la larga cola de formatos especializados, propietarios o heredados, ningún servicio, incluido CocoConvert, puede prometer una cobertura completa. Formatos como Autodesk DWG para dibujos CAD, variantes de imágenes médicas propietarias de marcas de escáneres específicas, o formatos de audio de nicho de sintetizadores antiguos, a menudo tienen una documentación abierta deficiente o inexistente. Incluso si se conocen los 'magic bytes', la estructura interna puede ser una caja negra. Un conversor podría producir un resultado con datos faltantes, colores incorrectos o capas de metadatos perdidas. En el momento de escribir este artículo, CocoConvert admite unos 300 formatos de entrada. Aunque parezca mucho, el registro PRONOM de la Biblioteca del Congreso de EE. UU. documenta más de 2000 formatos de archivo distintos. Esa brecha representa formatos que son demasiado rebuscados como para justificar el esfuerzo de ingeniería, están legalmente gravados por patentes o están tan mal documentados que cualquier intento de conversión sería una apuesta arriesgada. Mi recomendación es esta: si trabajas en sectores como el de las imágenes médicas, los datos geoespaciales o el vídeo profesional, debes verificar la compatibilidad de formatos antes de comprometerte con un flujo de trabajo de conversión. Consulta la página de compatibilidad de formatos de CocoConvert. Enumera todas las entradas y salidas admitidas, junto con notas sobre las limitaciones conocidas. Es mejor comprobarlo primero que subir un archivo maestro de emisión de 4 GB solo para descubrir que su variante específica de MXF no es compatible. Los 'magic bytes' le dicen a un ordenador qué *es* un archivo. No le dicen si la conversión de ese archivo producirá algo *útil*. Esa segunda pregunta, más importante, depende de una buena documentación, licencias claras y un trabajo de ingeniería dedicado que ninguna cantidad de ingeniosa inspección de bytes puede reemplazar.