Qu'est-ce qu'un Magic Number de fichier ? Détection de format expliquée
Publié le 24 avril 2026 · 6 min de lecture
Comment l'OS sait-il ce qu'est un fichier ?
Renommez un PNG en .txt. Quick Look de macOS l'affiche toujours comme une image. Exécutez file renamed.txt sous Linux — la sortie indique toujours PNG image data. Le nom a changé, mais le format non. Pourquoi ?
Parce que de nombreux détecteurs inspectent les octets du contenu — un magic number ou une signature — au lieu de faire confiance au seul nom du fichier.
Les extensions influencent toujours l'association et l'ouverture des fichiers. Des outils comme <code>file</code> et certains traitements MIME inspectent aussi les octets, mais leurs règles ne sont pas identiques.
Qu'est-ce qu'un Magic Number ?
Chaque format de fichier réserve une séquence fixe d'octets au début du fichier pour déclarer son type. Ceux-ci sont appelés magic numbers (aussi connus comme signatures de fichier ou en-têtes de fichier).
Pensez à un passeport : le contrôle aux frontières ne demande pas votre nom — il ouvre la première page et confirme votre nationalité. Un magic number est la « première page » d'un fichier. Quel que soit le nom, les premiers octets révèlent la vérité.
La commande Unix file compare le contenu à une base magic de motifs d'octets. Cela renseigne sur le format, sans remplacer le MIME, les métadonnées du conteneur ni les règles propres à chaque outil.
Table de référence rapide des Magic Numbers
Signatures de format courantes que vous rencontrerez en pratique :
| Format | Magic Bytes (Hex) | ASCII | Notes |
|---|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | ‰PNG.... | 8 octets, l'une des signatures les plus reconnaissables |
| JPEG | FF D8 FF | — | 3 octets ; le 3e varie selon le sous-type |
| GIF | 47 49 46 38 | GIF8 | Suivi de 37 (GIF87a) ou 39 (GIF89a) |
| 25 50 44 46 | %PDF | Suivi de la version, ex. -1.7 | |
| WebP | 52 49 46 46 … 57 45 42 50 | RIFF…WEBP | Conteneur RIFF ; vérifier les octets 8–11 |
| WAV | 52 49 46 46 … 57 41 56 45 | RIFF…WAVE | Conteneur RIFF ; sous-type WAVE |
| MP3 | 49 44 33 / FF Fx | ID3 / sync | Avec tag ID3 : commence par ID3 ; sans tag : mot de synchronisation FF Ex ou FF Fx |
| FLAC | 66 4C 61 43 | fLaC | Audio sans perte, signature non ambiguë |
| MP4 / MOV / M4A | 00 00 00 xx 66 74 79 70 | ....ftyp | Conteneur ftyp ; vérifier la marque aux octets 8–11 |
| WebM | 1A 45 DF A3 | — | En-tête de conteneur EBML |
| OGG | 4F 67 67 53 | OggS | Conteneur audio/vidéo OGG |
| BMP | 42 4D | BM | Bitmap Windows |
Le piège : quatre octets ne suffisent pas toujours
Deux familles de conteneurs partagent des préfixes communs pour des types de médias complètement différents. S'arrêter à l'octet 4 donnera un résultat erroné.
Conteneur RIFF (WebP / WAV / AVI)
WebP, WAV et AVI commencent tous par RIFF (52 49 46 46). Le sous-type réel se trouve aux octets 8–11 :
Conteneur ftyp (MP4 / MOV / M4A)
MP4, MOV et M4A commencent par une taille de boîte variable de 4 octets, puis ftyp aux octets 4–7. Le code de marque aux octets 8–11 détermine le format réel :
Codes de marque à connaître : isom / iso2 / avc1 = MP4, M4A = M4A (audio Apple), qt = QuickTime MOV.
Essayez : la commande file lit les Magic Numbers directement
Sur macOS et Linux, la commande file identifie les formats en lisant les magic numbers — pas le nom du fichier :
# macOS / Linux
$ file -b photo.png
PNG image data, 617 x 875, 8-bit/color RGBA, non-interlaced
$ file -b photo.txt # extension changée en .txt
PNG image data, 617 x 875, 8-bit/color RGBA, non-interlaced file est un outil intégré à macOS et Linux. Windows n'a pas d'équivalent natif.
Si vous devez implémenter la même détection en code, la logique se résume à quelques lignes de JavaScript :
// Lire les 18 premiers octets d'une chaîne Base64 pour la détection de format
// (4 caractères Base64 = 3 octets)
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) Consultez la table : 89 50 4e 47 → PNG, ff d8 ff → JPEG, 25 50 44 46 → PDF.
Résumé
Les octets magiques sont un indice fort du format binaire, mais pas un système de types universel. Tenez compte de la signature, du MIME déclaré, des métadonnées du conteneur et des règles de l'outil qui consomme le fichier.
Renommer un fichier ne change pas ses octets : les détecteurs fondés sur le contenu peuvent donc reconnaître le format d'origine, tandis que les associations fondées sur le nom peuvent différer.
Article connexe
Comment déboguer les images Base64 dans les réponses JSON d'API →ViewJSON applique la détection de magic numbers à chaque chaîne de votre JSON — les images, audio et vidéos Base64 s'affichent automatiquement en aperçu inline.
Essayez maintenant
Collez n'importe quel JSON contenant du Base64 — ViewJSON détecte automatiquement le format et affiche images, audio et vidéo inline. Pas de décodage manuel.
Ouvrir ViewJSON →