Stéganographie visuelle

La stéganographie visuelle consiste à cacher un message visuel dans une image.

Cette image contient un message caché ! Sauras-tu le retrouver ?

Télécharger l’image et l’ouvrir avec un éditeur d’image. Et bon courage !

 

Principe

L’image secrète est cachée dans les bits de poids faibles, c’est à dire les bits les moins significatifs (en anglais lsb : least significant bits) de l’image originale.

Opérations sur les octets

Pour faire de la stéganographie (codage, décodage), il faut manipuler les bits d’un octets (masquage, déplacement, …).

Pour réaliser les fonctions ci-dessous, il faudra utiliser les opérateurs « bit à bit » de Python :

Opérateurs binaires
Opérateur Signification Exemple
& ET 0b1101 & 0b1010 = 0b1000
| OU 0b1101 | 0b1010 = 0b1111
~ NON ~0b1101 = 0b10
^ OU exclusif 0b1101 ^ 0b1010 = 0b0111
>> Décalage à droite 0b1101 >> 2 = 0b11
<< Décalage à gauche 0b1101 << 2 = 0b110100

 

Écrire une fonction msb2lsb(o, n) qui renvoie un octet (type int) ne contenant plus que les n bits les plus significatifs de l’octet o (et les rend par conséquent moins significatifs).

Exemple : bin(msb2lsb(0b10111011, 3))"0b101"

Aide

 

Écrire une fonction lsb(o, n) qui renvoie un octet ne contenant plus que les n bits les moins significatifs de l’octet o.

Exemple : bin(lsb(0b10111011, 3))"0b11"

Aide

 

Écrire une fonction lsb2msb(o, n) qui renvoie un octet ne contenant plus que les n bits les moins significatifs de l’octet o, mais déplacés à la place la plus significative.

Exemple : bin(lsb2msb(0b10111011, 3))"0b11"

Aide

 

Écrire une fonction lsb2zero(o, n) qui renvoie un octet ne contenant plus que les n bits les moins significatifs de l’octet o.

Exemple : bin(lsb2zero(0b10111011, 3))"0b10111000"

Aide

 

Encodage et décodage sur des images

Pour cacher une image dans une autre, ou au contraire retrouver une image cachée, on doit opérer des manipulations sur les octets représentant les pixels : une seul octet pour les images en niveaux de gris, 3 pour celle en couleur, …

Pour réaliser les fonctions ci dessous, on utilisera celles définies plus haut.

Réaliser la fonction decode_image(image, n) retourne l’image cachée dans image (une image de type PIL.Image), n étant le nombre de bits de poids faibles utilisés.

 

Réaliser la fonction fusion(pixel1, pixel2) qui traite puis fusionne (opération binaire à déterminer) les pixels pixel1, pixel2 (des tuples s’il s’agit d’images en couleur !).

 

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *