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 Betriebssysteme niemals den Dateinamen zur Formaterkennung verwenden. Sie lesen eine feste Bytefolge am Dateianfang — die sogenannte Magic Number (auch als Dateisignatur oder Datei-Header bekannt).
Windows Explorer, macOS Finder, Browser-MIME-Sniffing — alle nutzen denselben Ansatz: die ersten Bytes lesen, mit bekannten Signaturen vergleichen und daraus schlussfolgern.
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.
Genau so funktioniert der Unix-Befehl file: Er pflegt eine magic-Datenbank mit Byte-Mustern und gleicht dagegen ab — ohne auf Dateiendungen angewiesen zu sein. Windows Explorer, macOS Finder und Browser-MIME-Sniffing funktionieren genauso. Der Dateityp wird durch den Inhalt bestimmt, nicht durch den Namen.
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
Der Dateityp wird durch die Magic Bytes am Anfang des binären Inhalts bestimmt — nicht durch den Dateinamen oder die Erweiterung. Lesen Sie die ersten Bytes, vergleichen Sie mit bekannten Signaturen, und Sie können jedes Format ohne weiteren Kontext identifizieren.
Deshalb lässt sich das Betriebssystem — und jedes Tool, das Magic Numbers liest — nicht durch das Umbenennen einer Datei täuschen.
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 →