Blog

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)
PDF 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:

+0
RIFF
gemeinsames Präfix
+4
Dateigröße (4 Bytes)
+8
Subtyp WEBP / WAVE / AVI
tatsächliches Format
+12
Chunk-Daten

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:

+0
Boxgröße (variabel)
+4
ftyp
fester Marker
+8
Marke isom / M4A / qt
tatsächliches Format
+12
Kompatibilitätsliste

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 →