Mario a perdu la combinaison à 4 lettres du cadenas qui sécurise son coffre. Le code est caché dans une image numérique. C'est de la stéganographie.
Votre objectif : Utiliser le protocole de codage pour retrouver le code à 4 lettres.

Protocole de codage :
  • Chaque lettre du code à cacher est représentée par son code ASCII en binaire. Par exemple, le code ASCII de la lettre "A" est 01000001 (voir tableau de correspondance ASCII ci-joint).
  • La première lettre est codée à partir du pixel de coordonnées (colonne 19 ; ligne 29). Une seule lettre est cachée par ligne. La deuxième lettre est codée à partir du pixel (colonne 19 ; ligne 28) ...
  • Les caractères « 0 » ou « 1 » sont codé dans les composantes RVB des pixels : si le nombre est pair il code pour un « 0 », s'il est impair, pour un « 1 ».
  • Pour réaliser ce codage, les valeurs des composantes RVB des pixels d'origine ont pu être modifiées, en ajoutant 1, pour s'assurer de leur parité.
Exemple pour coder la lettre V :
pixel 1 pixel 2 pixel 3
Image initiale 138 65 23 234 87 34 126 90 40
Octet à cacher 0 1 0 1 0 1 1 0
Image modifiée 138 65 24 235 88 35 127 90 40

En appliquant ce système de code à l'image de gauche, on obtient l'image de droite. On ne perçoit aucune différente à l'œil nu.

(Cliquer pour télécharger)
8 Caractère ASCII;Nombre binaire sur un octet A;1000001 B;1000010 C;1000011 D;1000100 E;1000101 F;1000110 G;1000111 H;1001000 I;1001001 J;1001010 K;1001011 L;1001100 M;1001101 N;1001110 O;1001111 P;1010000 Q;1010001 R;1010010 S;1010011 T;1010100 U;1010101 V;1010110 W;1010111 X;1011000 Y;1011001 Z;1011010
En utilisant vos connaissances sur les images et le langage Python, trouver et décoder le message contenu dans la deuxième image.
Pour démarrer, on pourra afficher les pixels dont les valeurs R, V ou B sont différentes dans les deux images.
Expert
Écrire une programme Python permettant de cacher un message saisi par l'utilisateur dans une image.