¿Qué es un Magic Number de archivo? Detección de formato explicada
Publicado el 24 de abril de 2026 · 6 min de lectura
¿Cómo sabe el sistema operativo qué es un archivo?
Renombra un PNG a .txt. Quick Look de macOS sigue mostrándolo como imagen. Ejecuta file renamed.txt en Linux: la salida sigue siendo PNG image data. El nombre cambió, pero el formato no. ¿Por qué?
Porque muchos detectores de formato inspeccionan bytes del propio contenido —un magic number o firma de archivo— en vez de confiar solo en el nombre.
Las extensiones siguen influyendo en la asociación y apertura de archivos. Herramientas como <code>file</code> y algunos flujos MIME también inspeccionan bytes, pero no todos aplican las mismas reglas.
¿Qué es un Magic Number?
Cada formato de archivo reserva una secuencia fija de bytes al inicio del archivo para declarar su tipo. Estos se llaman magic numbers (también conocidos como firmas de archivo o cabeceras de archivo).
Piensa en un pasaporte: el control fronterizo no pregunta tu nombre — abre la primera página y confirma tu nacionalidad. Un magic number es la «primera página» de un archivo. Sin importar cómo se llame, esos primeros bytes revelan la verdad.
Así funciona el comando file de Unix: compara el contenido con una base de datos magic de patrones de bytes. Eso aporta evidencia sobre el formato, pero no sustituye al MIME, los metadatos del contenedor ni las reglas de cada programa.
Tabla de referencia rápida de Magic Numbers
Firmas de formato comunes que encontrarás en la práctica:
| Formato | Magic Bytes (Hex) | ASCII | Notas |
|---|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | ‰PNG.... | 8 bytes, una de las firmas más reconocibles |
| JPEG | FF D8 FF | — | 3 bytes; el 3.º varía según el subtipo |
| GIF | 47 49 46 38 | GIF8 | Seguido de 37 (GIF87a) o 39 (GIF89a) |
| 25 50 44 46 | %PDF | Seguido de la versión, p. ej. -1.7 | |
| WebP | 52 49 46 46 … 57 45 42 50 | RIFF…WEBP | Contenedor RIFF; verificar bytes 8–11 |
| WAV | 52 49 46 46 … 57 41 56 45 | RIFF…WAVE | Contenedor RIFF; subtipo WAVE |
| MP3 | 49 44 33 / FF Fx | ID3 / sync | Con etiqueta ID3: inicia con ID3; sin etiqueta: palabra de sincronización FF Ex o FF Fx |
| FLAC | 66 4C 61 43 | fLaC | Audio sin pérdida, firma inequívoca |
| MP4 / MOV / M4A | 00 00 00 xx 66 74 79 70 | ....ftyp | Contenedor ftyp; verificar la marca en bytes 8–11 |
| WebM | 1A 45 DF A3 | — | Cabecera de contenedor EBML |
| OGG | 4F 67 67 53 | OggS | Contenedor de audio/vídeo OGG |
| BMP | 42 4D | BM | Mapa de bits de Windows |
La trampa: cuatro bytes no siempre son suficientes
Dos familias de contenedores comparten prefijos comunes en tipos de medios completamente diferentes. Detenerse en el byte 4 dará un resultado incorrecto.
Contenedor RIFF (WebP / WAV / AVI)
WebP, WAV y AVI empiezan con RIFF (52 49 46 46). El subtipo real está en los bytes 8–11:
Contenedor ftyp (MP4 / MOV / M4A)
MP4, MOV y M4A empiezan con un tamaño de caja variable de 4 bytes, luego ftyp en los bytes 4–7. El código de marca en bytes 8–11 determina el formato real:
Códigos de marca clave: isom / iso2 / avc1 = MP4, M4A = M4A (audio Apple), qt = QuickTime MOV.
Pruébalo: el comando file lee los Magic Numbers directamente
En macOS y Linux, el comando file identifica formatos leyendo los magic numbers, no el nombre del archivo:
# macOS / Linux
$ file -b photo.png
PNG image data, 617 x 875, 8-bit/color RGBA, non-interlaced
$ file -b photo.txt # extensión cambiada a .txt
PNG image data, 617 x 875, 8-bit/color RGBA, non-interlaced file es una herramienta integrada en macOS y Linux. Windows no tiene un equivalente nativo.
Si necesitas implementar la misma detección en código, la lógica central son solo unas pocas líneas de JavaScript:
// Leer los primeros 18 bytes de una cadena Base64 para detección de formato
// (cada 4 caracteres Base64 = 3 bytes)
const b64 = "iVBORw0KGgoAAAANSUhEUgAA...";
const bin = atob(b64.slice(0, 24));
const hex = [...bin]
.map(c => c.charCodeAt(0).toString(16).padStart(2, "0"))
.join(" ");
console.log(hex);
// → 89 50 4e 47 0d 0a 1a 0a ... (PNG) Consulta la tabla: 89 50 4e 47 → PNG, ff d8 ff → JPEG, 25 50 44 46 → PDF.
Resumen
Los bytes mágicos son una evidencia fuerte del formato binario, pero no un sistema universal de tipos. Ten en cuenta la firma, el MIME declarado, los metadatos del contenedor y las reglas de la herramienta que lo consume.
Cambiar el nombre no cambia los bytes, por lo que los detectores basados en contenido pueden reconocer el formato original; las asociaciones basadas en el nombre pueden comportarse de otra forma.
Artículo relacionado
Cómo depurar imágenes Base64 en respuestas JSON de API →ViewJSON aplica detección de magic numbers a cada cadena en tu JSON: las imágenes, audio y vídeo Base64 se previsual izan como vistas previas inline automáticamente.
Pruébalo ahora
Pega cualquier JSON con contenido Base64 — ViewJSON detecta automáticamente el formato y muestra imágenes, audio y vídeo inline. Sin decodificación manual.
Abrir ViewJSON →