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

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 →