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) … L'origine est choisie en bas à gauche de l'image.
  • 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)
mario.png
mario-code.png
Caractère ASCIINombre binaire sur un octet
A1000001
B1000010
C1000011
D1000100
E1000101
F1000110
G1000111
H1001000
I1001001
J1001010
K1001011
L1001100
M1001101
N1001110
O1001111
P1010000
Q1010001
R1010010
S1010011
T1010100
U1010101
V1010110
W1010111
X1011000
Y1011001
Z1011010
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.