Was ist eine Magic Number? Dateiformaterkennung erklärt
Veröffentlicht am 24. April 2026 · 6 Min. Lesezeit
Woher weiß das Betriebssystem, was eine Datei ist?
Benennen Sie eine PNG-Datei in .txt um. Quick Look unter macOS zeigt sie trotzdem als Bild an. Führen Sie file renamed.txt unter Linux aus — die Ausgabe lautet weiterhin PNG image data. Der Dateiname hat sich geändert, aber das Format nicht. Warum?
Weil viele Formaterkenner Bytes im Dateiinhalt prüfen — eine sogenannte Magic Number oder Dateisignatur — statt allein dem Dateinamen zu vertrauen.
Dateiendungen beeinflussen weiterhin die Zuordnung und das Öffnen von Dateien. Werkzeuge wie <code>file</code> und manche MIME-Prüfungen untersuchen zusätzlich Bytes, wenden aber nicht alle dieselben Regeln an.
Was ist eine Magic Number?
Jedes Dateiformat reserviert eine feste Bytefolge am Dateianfang, um seinen Typ zu deklarieren. Diese werden Magic Numbers genannt (auch bekannt als Dateisignaturen oder Datei-Header).
Stellen Sie sich einen Reisepass vor: Die Grenzkontrolle fragt nicht nach Ihrem Namen — sie öffnet die erste Seite und bestätigt Ihre Nationalität. Eine Magic Number ist die «erste Seite» einer Datei. Egal wie die Datei heißt, die ersten Bytes verraten die Wahrheit.
So arbeitet der Unix-Befehl file: Er vergleicht den Inhalt mit einer magic-Datenbank von Byte-Mustern. Das liefert Hinweise auf das Format, ersetzt aber nicht MIME-Angaben, Container-Metadaten oder die Regeln des jeweiligen Programms.
Magic-Number-Kurzreferenz
Häufige Formatsignaturen, die Ihnen in der Praxis begegnen:
| Format | Magic Bytes (Hex) | ASCII | Hinweise |
|---|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | ‰PNG.... | 8 Bytes, eine der bekanntesten Signaturen |
| JPEG | FF D8 FF | — | 3 Bytes; das 3. Byte variiert je nach Subtyp |
| GIF | 47 49 46 38 | GIF8 | Gefolgt von 37 (GIF87a) oder 39 (GIF89a) |
| 25 50 44 46 | %PDF | Gefolgt von der Version, z. B. -1.7 | |
| WebP | 52 49 46 46 … 57 45 42 50 | RIFF…WEBP | RIFF-Container; Bytes 8–11 prüfen |
| WAV | 52 49 46 46 … 57 41 56 45 | RIFF…WAVE | RIFF-Container; Subtyp ist WAVE |
| MP3 | 49 44 33 / FF Fx | ID3 / sync | Mit ID3-Tag: beginnt mit ID3; ohne Tag: Sync-Wort FF Ex oder FF Fx |
| FLAC | 66 4C 61 43 | fLaC | Verlustfreies Audio, eindeutige Signatur |
| MP4 / MOV / M4A | 00 00 00 xx 66 74 79 70 | ....ftyp | ftyp-Container; Marke bei Bytes 8–11 prüfen |
| WebM | 1A 45 DF A3 | — | EBML-Container-Header |
| OGG | 4F 67 67 53 | OggS | OGG-Audio/Video-Container |
| BMP | 42 4D | BM | Windows-Bitmap |
Die Falle: Vier Bytes reichen nicht immer
Zwei Container-Familien teilen sich gemeinsame Präfixe bei völlig unterschiedlichen Medientypen. Bei Byte 4 aufzuhören, gibt ein falsches Ergebnis.
RIFF-Container (WebP / WAV / AVI)
WebP, WAV und AVI beginnen alle mit RIFF (52 49 46 46). Der tatsächliche Subtyp befindet sich bei Bytes 8–11:
ftyp-Container (MP4 / MOV / M4A)
MP4, MOV und M4A beginnen mit einer variablen 4-Byte-Boxgröße, dann ftyp bei Bytes 4–7. Der Markencode bei Bytes 8–11 bestimmt das tatsächliche Format:
Wichtige Markencodes: isom / iso2 / avc1 = MP4, M4A = M4A (Apple Audio), qt = QuickTime MOV.
Ausprobieren: file-Befehl liest Magic Numbers direkt
Unter macOS und Linux identifiziert der file-Befehl Formate durch Lesen der Magic Numbers — nicht anhand des Dateinamens:
# macOS / Linux
$ file -b photo.png
PNG image data, 617 x 875, 8-bit/color RGBA, non-interlaced
$ file -b photo.txt # Dateiendung in .txt geändert
PNG image data, 617 x 875, 8-bit/color RGBA, non-interlaced file ist ein integriertes Tool unter macOS und Linux. Windows hat kein natives Äquivalent.
Wenn Sie die gleiche Erkennung im Code implementieren möchten, ist die Kernlogik nur ein paar Zeilen JavaScript:
// Die ersten 18 Bytes eines Base64-Strings für die Formaterkennung lesen
// (je 4 Base64-Zeichen = 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) Abgleich mit der Tabelle: 89 50 4e 47 → PNG, ff d8 ff → JPEG, 25 50 44 46 → PDF.
Zusammenfassung
Magic Bytes sind ein starkes Indiz für das zugrunde liegende Binärformat, aber kein universelles Typsystem. Berücksichtigen Sie Signatur, MIME-Angabe, Container-Metadaten und die Regeln des jeweiligen Werkzeugs.
Das Umbenennen ändert die Bytes nicht; inhaltsbasierte Erkenner finden das ursprüngliche Format weiterhin, während namensbasierte Zuordnungen anders reagieren können.
Verwandter Artikel
So debuggen Sie Base64-Bilder in JSON-API-Antworten →ViewJSON wendet Magic-Number-Erkennung auf jeden String in Ihrem JSON an — Base64-Bilder, Audio und Video werden automatisch als Inline-Vorschau dargestellt.
Jetzt ausprobieren
Fügen Sie beliebiges JSON mit Base64-Inhalten ein — ViewJSON erkennt automatisch das Format und zeigt Bilder, Audio und Video inline an. Kein manuelles Decodieren.
ViewJSON öffnen →