La stéganographie permet de cacher discrètement des données dans une image, un son ou un fichier sans éveiller les soupçons. Dans ce guide complet, découvrez comment fonctionne la stéganographie, comment écrire et lire des messages cachés, les détecter et vous protéger des fichiers piégés.
- Des informations peuvent être dissimulées dans une image et pourquoi cette technique est utilisée en cybersécurité comme en usage légitime.
- Découvrir les méthodes essentielles pour repérer, lire ou analyser des fichiers suspects sans être expert en informatique.
- Apprendre à reconnaître les pièges courants des pièces jointes frauduleuses pour mieux protéger vos données et éviter les arnaques.
Vous regardez une photo banale de vacances. Un coucher de soleil, un chat sur un canapé ou un café posé sur une table. Pourtant, derrière cette image parfaitement normale, il peut se cacher un message, un mot de passe, un fichier texte ou une information sensible. Voilà tout le principe de la stéganographie.
Contrairement au chiffrement, qui protège le contenu en le rendant illisible, la stéganographie cherche à rendre le message… invisible. C’est discret, fascinant, parfois utile, parfois détourné. Dans ce tutoriel, vous allez comprendre comment fonctionne la stéganographie dans une image, comment cacher des données, les lire, les détecter, et surtout comment reconnaître les pièges les plus courants liés aux pièces jointes malveillantes.
- Qu’est-ce que la stéganographie ?
- Comment cacher du texte dans une image avec les bits LSB
- Exemple de code Python : écrire un message LSB
- Lire un message caché LSB
- Comment détecter une image modifiée en LSB
- Stocker un payload encodé en Base64
- Outils CLI gratuits pour la stéganographie
- Différence entre cacher dans les pixels et coller après le fichier
- Les vrais dangers : ce qui piège réellement les utilisateurs
- Petit exercice d'entraînement …
Qu’est-ce que la stéganographie ?
Le mot stéganographie vient du grec et signifie littéralement “écriture cachée”. Le principe est simple : dissimuler une information dans un support qui semble innocent.
Ce support peut être :
- une image PNG ou JPG
- un fichier audio
- une vidéo
- un document texte
- parfois même un réseau ou un protocole informatique
Dans ce tutoriel, nous allons nous concentrer sur le cas le plus connu : cacher des données dans une image.
Imaginez une enveloppe transparente contenant une lettre chiffrée. Tout le monde voit qu’il y a un message. Avec la stéganographie, c’est différent : vous cachez la lettre dans l’épaisseur du papier. Personne ne soupçonne même sa présence.
À quoi sert la stéganographie ?
La stéganographie peut avoir des usages parfaitement légitimes.
- Un journaliste peut transmettre discrètement des informations sensibles.
- Une entreprise peut marquer ses images avec une signature invisible.
- Un développeur peut apprendre la cybersécurité en comprenant les techniques de dissimulation.
Mais, comme beaucoup d’outils, elle peut aussi être détournée :
- exfiltration de données
- échange discret entre malwares
- camouflage de scripts
- défi CTF et pentest pédagogique
C’est pour cela qu’il est utile de la comprendre : connaître les techniques défensives commence souvent par comprendre les offensives.
Comment cacher du texte dans une image avec les bits LSB
Le principe du LSB expliqué simplement :
LSB signifie Least Significant Bit, soit “bit de poids faible”.
Une image numérique est composée de pixels. Chaque pixel contient généralement trois couleurs :
- Rouge (R)
- Vert (G)
- Bleu (B)
Chaque couleur est codée sur 8 bits, donc une valeur entre 0 et 255.
Exemple : Rouge = 10110010
Le dernier bit (le plus à droite) influence très peu la couleur. Si vous le changez : 10110010 devient 10110011
À l’œil humain, la différence est quasiment invisible.
- C’est donc un endroit idéal pour cacher des données.

Pour mieux comprendre, voici un exemple concret. Prenons 8 pixels. En modifiant seulement le dernier bit de certaines valeurs, vous pouvez stocker la lettre A, dont le code ASCII est :
01000001
Chaque bit du message est injecté dans un pixel.
Résultat :
- l’image semble identique
- le message est caché dedans
C’est la magie discrète de la stéganographie LSB.
Exemple de code Python : écrire un message LSB
Voici un exemple simple pour débuter.
from PIL import Image
img = Image.open("image.png")
pixels = img.load()
message = "Bonjour"
binary = ''.join(format(ord(c), '08b') for c in message) + "1111111111111110"
index = 0
for y in range(img.height):
for x in range(img.width):
r, g, b = pixels[x, y]
if index < len(binary):
r = (r & ~1) | int(binary[index])
index += 1
pixels[x, y] = (r, g, b)
img.save("image_cachee.png")
print("Message caché")
Explication simple
Cette ligne convertit le texte en binaire :
format(ord(c), '08b')
Puis :
r = (r & ~1) | bit
Elle remplace le dernier bit du rouge par le bit du message.
Enfin, l’image est sauvegardée.
Comment utiliser ce script Python
Pour utiliser ce script Python de stéganographie, commencez par installer la bibliothèque Pillow, qui permet de manipuler les images avec Python. Ouvrez votre terminal puis tapez :
pip install pillow
Placez ensuite votre image dans le même dossier que le script et renommez-la en image.png, ou modifiez simplement le nom dans la ligne Image.open("image.png").
Choisissez ensuite le texte que vous souhaitez cacher en remplaçant "Bonjour" par votre propre message. Lorsque vous lancez le script avec :
python script.py
Celui-ci va lire l’image, modifier discrètement certains bits invisibles des pixels, puis enregistrer une nouvelle image nommée image_cachee.png.
- À l’œil nu, elle semblera identique à l’originale.
Il faut toutefois respecter une limite importante : plus le message est long, plus l’image doit contenir suffisamment de pixels pour le stocker. Une petite image ne pourra pas cacher un roman, même avec beaucoup de bonne volonté.
Pour de meilleurs résultats, privilégiez le format PNG, car il conserve les données sans compression destructive, contrairement au JPG qui peut altérer les bits modifiés. Enfin, gardez l’image originale de côté pour comparer les fichiers ou refaire des tests. C’est une excellente base pour découvrir concrètement comment fonctionne la stéganographie.
Lire un message caché LSB
Voici maintenant comment extraire le texte.
from PIL import Image
img = Image.open("image_cachee.png")
pixels = img.load()
bits = ""
for y in range(img.height):
for x in range(img.width):
r, g, b = pixels[x, y]
bits += str(r & 1)
message = ""
for i in range(0, len(bits), 8):
byte = bits[i:i+8]
if byte == "11111110":
break
message += chr(int(byte, 2))
print(message)
Ce script relit chaque dernier bit, reconstruit des octets, puis recompose les lettres.
- Vous venez de faire votre première lecture de stéganographie image.
Comment détecter une image modifiée en LSB
Une image cachant des données n’est pas toujours visible à l’œil nu. Il faut analyser.
Indices possibles
Une image suspecte peut présenter :
- une taille anormale
- une compression étrange
- des motifs statistiques inhabituels
- trop de bits modifiés
Méthode simple en Python
from PIL import Image
img = Image.open("image.png")
pixels = img.load()
zeros = 0
ones = 0
for y in range(img.height):
for x in range(img.width):
r, g, b = pixels[x, y]
if r & 1:
ones += 1
else:
zeros += 1
print("0 :", zeros)
print("1 :", ones)
Si la distribution paraît artificiellement équilibrée, cela peut être un indice.
Ce script ne lit pas directement un message caché. Il compte simplement le nombre de bits de poids faible (LSB) à 0 et à 1 dans la composante rouge de chaque pixel. En clair, il observe le dernier bit de chaque valeur rouge pour essayer de repérer une anomalie statistique.
Dans vos résultats, l’image normale (celle que j’ai choisi pour le test) donne :
0 : 197957
1 : 212743
Et l’image contenant Bonjour (la même image mais avec ce message caché) :
0 : 197939
1 : 212761
La différence est très faible :
- les
0baissent de 18 - les
1augmentent de 18
C’est logique : cacher Bonjour modifie seulement quelques bits. Le mot “Bonjour” contient 7 lettres, donc environ 56 bits (7 × 8), plus le marqueur de fin utilisé dans votre autre script. Sur une image contenant plus de 400 000 pixels, cette modification est minuscule.
Comment interpréter cela concrètement ?
Ces résultats montrent une chose importante : une petite charge cachée est difficile à détecter avec un simple comptage global. La répartition générale reste presque identique. C’est comme verser un verre d’eau dans une piscine : techniquement le niveau monte, visuellement vous ne voyez rien.
Quand ce script devient plus utile ?
Il peut commencer à révéler quelque chose si :
- un très long message est caché
- une grande partie des pixels est modifiée
- plusieurs canaux sont utilisés (R, G, B)
- les bits deviennent artificiellement équilibrés entre 0 et 1
Dans ce cas, la distribution peut devenir suspecte.
Ce script seul ne permet pas d’affirmer qu’une image contient de la stéganographie. Il donne juste un indice statistique très brut. Pour une vraie détection, il faut comparer :
- image originale vs image modifiée
- histogrammes
- analyse LSB visuelle
- outils comme
zsteg,steghide,binwalk
Dans notre cas, les deux résultats sont presque identiques car Bonjour est trop petit pour perturber significativement l’image. Ce script nous montre donc surtout à quel point la stéganographie LSB peut être discrète.
Stocker un payload encodé en Base64
En informatique, le payload (ou « charge utile » en français) est la partie d’un message ou d’un fichier qui contient les données réelles que vous souhaitez transmettre.
Pour mieux comprendre, imaginez que vous envoyiez un colis par la poste :
- Le carton, le papier bulle et l’étiquette avec l’adresse sont le « surplus » nécessaire au transport.
- L’objet à l’intérieur du carton (le cadeau que vous offrez) est le payload.
C’est donc le contenu concret et utile, débarrassé de toutes les informations techniques servant uniquement à son acheminement ou à sa protection.
Pourquoi utiliser Base64 ?
Le Base64 transforme un contenu binaire en texte lisible composé de caractères.
Exemple :
Bonjour
devient :
Qm9uam91cg==
C’est utile pour cacher :
- scripts
- mini fichiers
- texte structuré
- commandes pédagogiques
Encoder un payload avec Python
import base64
texte = "secret demo"
encoded = base64.b64encode(texte.encode())
print(encoded.decode())
Résultat :
c2VjcmV0IGRlbW8=
Ensuite, ce texte peut être caché via la méthode LSB.
Lire puis décoder le payload en base64
import base64
payload = "c2VjcmV0IGRlbW8="
decoded = base64.b64decode(payload)
print(decoded.decode())
Résultat :
secret demo
Le Base64 ne protège rien. Ce n’est pas du chiffrement. C’est juste un emballage texte. Beaucoup de débutants confondent les deux.
👉 Pour aller plus loin : Introduction à la cryptographie
Outils CLI gratuits pour la stéganographie
Steghide
Très connu sous Linux.
Installation sur Debian / Ubuntu :
sudo apt install steghide
Pour installer Steghide sur un Mac, la méthode la plus simple consiste à utiliser Homebrew, le gestionnaire de paquets incontournable pour macOS.
Voici la commande à saisir dans votre Terminal :
brew install steghide
- Si vous n’avez pas encore Homebrew : Vous devrez d’abord installer HomeBrew en suivant les instructions sur le site officiel (brew.sh).
- Vérification : Une fois l’installation terminée, vous pouvez vérifier que tout fonctionne en tapant simplement
steghidedans votre console. - Utilisation : N’oubliez pas que Steghide est un outil en ligne de commande. Il vous servira à cacher votre payload(votre contenu secret) à l’intérieur d’une image ou d’un fichier audio.
Pour cacher un fichier :
Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?steghide embed -cf image.jpg -ef secret.txt
Pour lire le contenu :
steghide extract -sf image.jpg
Très pratique pour apprendre rapidement.
Zsteg
Excellent pour les fichiers PNG et BMP.
Pour installer Zsteg sur votre Mac, la procédure est légèrement différente car cet outil est écrit en Ruby. Contrairement à Steghide, il n’est pas toujours disponible directement via une simple commande brew install.
Voici les étapes à suivre dans votre terminal :
1. Installer Ruby (si nécessaire)
macOS possède Ruby par défaut, mais il est souvent préférable d’utiliser une version gérée par Homebrew pour éviter les problèmes de permissions :
brew install ruby
2. Installer Zsteg
Une fois Ruby prêt, vous utilisez le gestionnaire de paquets Ruby (appelé gem) pour installer l’outil :
gem install zsteg
- Erreur de permissions : Si la commande
gem installvous renvoie une erreur de type « Permission denied », vous pouvez soit utilisersudo gem install zsteg(déconseillé), soit configurer votre chemin d’accès (PATH) pour Ruby Homebrew. - Utilité : Contrairement à Steghide qui sert à cacher des données, Zsteg est un outil d’analyse. Il est très puissant pour détecter et extraire des payloads cachés dans des fichiers PNG ou BMP (notamment via les bits de poids faible, le fameux LSB).
Lancer une analyse :
zsteg image.png
Il teste automatiquement de nombreuses méthodes LSB.
Binwalk
Utilisé pour analyser des fichiers et extraire des contenus embarqués.
Pour installer Binwalk, vous pouvez à nouveau compter sur Homebrew. C’est l’outil indispensable pour l’analyse de fichiers binaires et l’extraction de payloads cachés dans des firmwares.
Voici la commande à exécuter :
brew install binwalk
Binwalk est souvent utilisé en complément de Zsteg et Steghide. Son rôle est de scanner un fichier à la recherche de signatures correspondant à d’autres fichiers (comme des images, des archives ou des exécutables) compressés ou intégrés à l’intérieur.
Si vous souhaitez que Binwalk puisse extraire automatiquement tout ce qu’il trouve (ce qui est souvent le but recherché), il a besoin de quelques outils supplémentaires. Vous pouvez les installer avec cette commande :
brew install p7zip unrar
Ou pour l’installer depuis Linux :
sudo apt install binwalk
Ensuite, pour analyser et extraire le contenu d’un fichier, vous utiliserez généralement l’option -e :
binwalk -e nom_de_votre_fichier
Si un zip ou payload est collé au fichier, il peut le détecter.
Strings
Simple mais redoutable.
L’outil strings fait partie des utilitaires de base des systèmes de type Unix (comme macOS et Linux). Il est généralement déjà présent sur votre système.
Ouvrez simplement votre terminal et tapez :
strings --version
Si vous voyez un numéro de version s’afficher, c’est que l’outil est prêt à l’emploi.
Alors que Binwalk cherche des structures de fichiers et Zsteg des données cachées dans les pixels, strings parcourt un fichier à la recherche de suites de caractères lisibles par un humain.
C’est très efficace pour trouver rapidement :
- Des messages d’erreur cachés.
- Des chemins de fichiers (paths).
- Des mots de passe ou des clés API laissés en clair dans un binaire.
- Des URL ou des adresses IP.
Dans le cas très rare où elle ne serait pas là (ou si vous voulez la version la plus récente), elle fait partie du paquet binutils. Vous pouvez l’installer via Homebrew :
brew install binutils
Petite astuce : Pour chercher un texte spécifique dans un immense fichier binaire, on combine souvent
stringsavecgrepcomme ceci :
strings mon_fichier | grep "mot_recherche"
👉 Pour ceux qui débutent avec le terminal : Tout savoir sur la commande GREP.
strings image.jpg
Affiche les chaînes texte visibles dans le binaire.
Parfois, le secret est caché grossièrement… et se dévoile en 2 secondes.
Différence entre cacher dans les pixels et coller après le fichier
Deux méthodes existent souvent.
- Méthode 1 : LSB > Le message est dans les bits des pixels. Invisible et discret.
- Méthode 2 : Append > On colle un fichier à la fin :
copy image.jpg + secret.zip final.jpg
L’image fonctionne encore, mais contient aussi un zip.
Simple, mais facile à détecter avec Binwalk.
Les vrais dangers : ce qui piège réellement les utilisateurs
La stéganographie intrigue, mais dans la vraie vie, les attaques les plus courantes sont souvent plus simples.
Pièces jointes piégées : PDF et DOC avec macros
- Un faux devis en PDF.
- Un CV Word urgent.
- Une facture en retard.
L’utilisateur ouvre le document, clique sur “Activer le contenu”, et une macro malveillante se lance.
- Les macros VBA ont longtemps été utilisées pour télécharger des malwares.
Aujourd’hui, Microsoft bloque mieux ces usages, mais le danger existe encore. La meilleure solution reste de ne jamais activer une macro si vous ne connaissez pas parfaitement la source.
Double extension : image.jpg.exe
Sous Windows, les extensions peuvent être masquées.
Vous voyez :
photo-vacances.jpg
Mais le vrai nom est :
photo-vacances.jpg.exe
C’est un exécutable. Vous pensez ouvrir une image, mais en réalité, vous lancez un programme. Classique, vieux, mais encore utilisé.
Phishing et ingénierie sociale
Parfois, aucun exploit technique n’est nécessaire.
Un simple message :
Bonjour, voici les photos du mariage.
Ou :
Votre colis est bloqué, ouvrez la pièce jointe.
La curiosité humaine fait le reste.
L’ingénierie sociale exploite l’émotion :
- urgence
- peur
- curiosité
- confiance
Et soyons honnêtes : même les plus prudents se font parfois surprendre un lundi matin.
Exploits de librairies d’image : cas réels
Ici, on parle d’un vrai danger technique.
Certaines bibliothèques qui lisent les images ont eu des failles.
L’exemple le plus célèbre est ImageMagick. ImageMagick est un outil serveur très utilisé pour redimensionner des images.
Des vulnérabilités ont permis, dans certains cas, l’exécution de commandes via des fichiers spécialement forgés.
L’image n’était pas “magique”. C’est le logiciel qui la traitait qui était vulnérable. Le danger ne vient donc pas de la photo elle-même, mais du programme qui la lit.
Comment se protéger efficacement
Face à la stéganographie et aux fichiers suspects :
- Gardez vos logiciels à jour.
- Analysez les pièces jointes douteuses.
- Utilisez un antivirus sérieux.
- Ouvrez les fichiers sensibles dans une sandbox ou machine virtuelle.
- Méfiez-vous des urgences artificielles.
- Vérifiez les extensions réelles.
Et surtout : si quelque chose semble étrange, ce n’est peut-être pas votre imagination.
Petit exercice d’entraînement …
Pour mettre vos nouvelles connaissances en pratique, l’image ci-dessous contient un message caché totalement inoffensif grâce à une technique simple de stéganographie.
Le défi est volontairement accessible aux débutants : observez, analysez, testez les outils présentés dans ce guide ou utilisez vos propres méthodes pour tenter de retrouver le texte dissimulé.
C’est un excellent exercice pour comprendre concrètement comment des données peuvent être cachées dans une image sans modifier son apparence visible.

Si vous trouvez la réponse, venez me la partager sur mes réseaux sociaux. Je serai ravi de voir vos méthodes, vos captures d’écran ou simplement votre résultat final. Vous pouvez me contacter sur Twitter, LinkedIn ou Instagram. Et si vous bloquez, ce n’est pas grave : parfois en cybersécurité, le plus intéressant n’est pas seulement la solution… mais le chemin pour y arriver.
La stéganographie est un domaine passionnant, à la frontière entre image numérique, sécurité informatique et discrétion technique. Elle montre qu’un fichier banal peut contenir bien plus qu’il n’en a l’air. Derrière un simple PNG peut se cacher un texte, un payload Base64, ou parfois juste un exercice pédagogique destiné à apprendre.
Mais la vraie leçon va plus loin. Comprendre la stéganographie, c’est apprendre à regarder le numérique autrement. Un fichier n’est jamais “juste un fichier”. Une image n’est pas toujours qu’une image. Et dans un monde rempli de contenus partagés à toute vitesse, savoir analyser avant de cliquer reste une compétence précieuse. La curiosité ouvre des portes… la prudence évite les pièges.
👉 Pour les développeurs web : Upload d’image sécurisé en PHP

Fondateur de l’agence Créa-troyes, affiliée France Num
Intervenant en Freelance.
Contactez-moi
