La Photo secrète

Déjouez les plans de la Team Rocket.

Un des membres de la Team Rocket (probablement Jessie) a envoyé une image apparemment chiffrée au Boss. Vous avez pu l'intercepter. Après enquête, vous avez trouvé une image similaire dans les dossier de James, un autre membre de la Team Rocket. Vous pensez qu'en combinant ces deux images, vous pourrez en obtenir une autre. En particulier, il est probable que l'image résultat soit une photo indiquant à quel endroit vous pouvez trouver des Pokémons.

Voici les deux images que vous avez récupérées :

Image 1

Image 2

Après avoir consulté un ami au sujet de ces images, celui-ci vous suggère qu'on peut les décoder de la façon suivante.

Méthode de déchiffrement

On dispose de deux images de mêmes dimensions, dont chaque pixel est codé en RVB sur trois octets (un octet rouge, un octet vert, un octet bleu). L'objectif est de combiner ces 2 images pour obtenir une image résultat.

L'image résultat, qui contient le message en clair, est une image en niveaux de gris, de mêmes dimensions que les deux images d'entrée. Chaque pixel de l'image résultat est codé sur un octet.

Chaque pixel du résultat est déchiffré indépendamment des autres. Pour obtenir le pixel (i,j) de l'image résultat, on utilise uniquement les pixels (i,j) des deux images d'entrée.

Pour trouver la valeur du pixel (i,j) de l'image résultat, il suffit d'appliquer la procédure suivante : Si les valeurs de la composante rouge des deux pixels (i,j) d'entrée sont identiques, alors l'information est codée dans le plan vert, sinon elle est codée dans le plan bleu.

La procédure pour obtenir cette information est la même dans les deux cas (on change juste de plan). Si l'information est codée dans le plan vert, on l'obtient en faisant un ou exclusif entre les composantes vertes des deux pixels (i,j) d'entrée. Le résultat de ce ou exclusif est un octet, c'est l'intensité de gris du pixel (i,j) de l'image résultat.

Si l'information avait été codée dans le plan bleu, on aurait fait la même chose, mais en utilisant les composantes bleues à la place des composantes vertes.

Exemple

Si les deux images de départ (format 3x3) sont celles en haut de la figure, alors on obtient par l'algorithme précédent la troisième image, située en bas :

Pour la case sur fond orange, par exemple, les composantes rouges sont égales (123). L'information est donc codée sur la composante verte. Les composantes vertes sont 231 et 184. Le résultat du ou exclusif donne 095, qui est inscrit dans l'image résultat.

Pour la case sur fond rose, les composantes rouges sont différentes (254 et 001). Donc l'information est stockée dans les composantes bleues. Elles sont égales à 211 et 252. Le résultat du ou exclusif donne 047. Cette valeur est inscrite dans l'image résultat.

Validation du défi

Pour valider le défi, indiquez à quel endroit vous devriez vous rendre pour trouver les Pokémons qui sont sur la photo.

Ce problème est tiré de c0d1ng UP 2017

Type de retour

Une chaîne de caractères

Entrée du problème

Pas de donnée d'entrée

Formulaire de réponse

Vous devez être connecté pour pouvoir répondre aux défis

Tags : cup17 image cryptographie