Table des matières:

Ce PNG est un compartiment secret : 4 étapes
Ce PNG est un compartiment secret : 4 étapes

Vidéo: Ce PNG est un compartiment secret : 4 étapes

Vidéo: Ce PNG est un compartiment secret : 4 étapes
Vidéo: MAIS CE PNJ EST TROP FORT ?!! 😱 #4 (Hello Neighbor 2) 2024, Novembre
Anonim
Ce est un compartiment secret
Ce est un compartiment secret
Ce est un compartiment secret
Ce est un compartiment secret

Votre défi, cher lecteur, est de découvrir quel message est caché dans l'image output-p.webp

Les deux images ici semblent identiques mais elles ne le sont pas. Ce sont les images greenman-p.webp

Cette instructable est inspirée d'une excellente vidéo youtube. Après avoir regardé cette vidéo tard dans la nuit un jour et avoir eu du mal à penser à un cours magistral et à un examen de mi-session pour un cours de programmation Java avancé, ce projet est né. Les images ci-dessus, ainsi que le code décrit dans cette instructable, sont gratuits sur Github.

Fournitures

Vous aurez besoin d'un ordinateur et vous devrez savoir comment compiler et exécuter un programme Java. Ce programme n'est que deux fichiers courts et vous devrez l'exécuter sur la ligne de commande.

Étape 1: Qu'est-ce que la stéganographie

Vous devriez regarder la vidéo youtube que j'ai liée à l'étape précédente, mais voici le résumé:

Si vous avez besoin de cacher un message secret à un ami, un moyen sympa de le faire est avec Steganography. L'idée de la stéganographie d'image est simple; les images informatiques sont constituées de pixels, et chaque pixel est une combinaison de rouge, vert et bleu. Dans de nombreux formats d'images informatiques, les quantités de rouge, de vert et de bleu dans chaque pixel sont exprimées sous forme de valeurs de 0 à 127. Ainsi, par exemple, un pixel très rouge aurait une valeur rouge de 127 et des valeurs vertes et bleues de zéro. L'astuce est la suivante: une intensité rouge de 126 est indiscernable d'une intensité rouge de 127 (pour un œil humain). Et donc en jouant avec plus ou moins un dans chaque pixel rouge, nous pouvons masquer des bits en pixels. Si nous trouvons un moyen sournois de récupérer les bits, nous pouvons récupérer les données que nous avons infiltrées dans l'image !

Sois créatif! La stéganographie peut se faire avec n'importe quel média numérique ! Vous pouvez jouer avec des bits dans des fichiers musicaux ou vidéo par exemple, mais cela vous oblige à faire plus de recherches en dehors du cadre de cette instructable.

Étape 2: Comment le texte est codé sur les ordinateurs

Comment le texte est codé sur les ordinateurs
Comment le texte est codé sur les ordinateurs

Ce qui suit ici peut nécessiter un diplôme en informatique ou beaucoup de passion d'amateur pour comprendre. Les ordinateurs stockent les données en bits sous forme de 1 et de 0. Ces 1 et 0 sont généralement regroupés par groupes de 8 et appelés « octets ». Comme expliqué ici et ici, il existe plusieurs façons de dire à un ordinateur d'interpréter les octets comme du texte. Pour tirer le meilleur parti de cette conférence/instruction de stéganographie, vous devez plus ou moins comprendre ASCII et UTF8. Il s'agit de deux manières courantes d'encoder des données de langue dans une série d'octets.

Une fois que vous avez une idée sur ce sujet, vous comprendrez ceci: En ASCII et UTF8, le mot "le" est représenté par les octets suivants (en hexadécimal) 0x74 0x68 0x65. En binaire, ces octets sont: 01110100b 01101000b 01101101b

De plus, vous comprendrez qu'en UTF8 un Emoji Visage souriant est représenté par les octets suivants (en hexadécimal) 0xF0 0x9F 0x98 0x80. En binaire, ces octets sont 11110000b 10011111b 10011000b 10000000b.

Dans tous les cas, vous verrez dans la capture d'écran ci-jointe que mon ordinateur fait quelque chose avec ces octets. Je les ai mis en évidence dans la sortie du programme avec des flèches et un gros "LOOK!".

Étape 3: Comment fonctionne le programme

La compilation du programme à partir de github est simple. Obtenez le repo affiché sur la page d'accueil ici et ensuite

Le programme est exécuté comme ceci à partir de la ligne de commande: java Main input-p.webp

dans les exemples ci-joints, vous verrez que j'ai exécuté java Main greenman-p.webp

Vous ferez la même chose.

Si vous regardez Main.java, vous verrez que c'est ce qui se passe:

  1. Le programme lit l'image dans un tableau 2D
  2. Le programme transforme le message que vous avez fourni en un tableau d'octets (byte)
  3. Le programme utilise ensuite une classe MessageHider pour masquer les octets de message dans le tableau d'images.
  4. Le programme écrit ensuite le tableau image 2D dans un fichier (output.png) avec les données cachées à l'intérieur. Si vous regardez cette image, elle est indiscernable de l'original
  5. Le programme lit ensuite output-p.webp" />

Donc à peu près le code fonctionne comme prévu.

Étape 4: Conclusion

Je vous ai donc donné du code de travail, la preuve qu'il fonctionne sous forme d'image, et quelques notes de cours que je donne à mes étudiants universitaires. Je t'ai aussi lancé un défi ! J'ai passé quelques heures à écrire le code et à préparer des notes de cours, donc je suis désolé que cette instructable n'ait pas beaucoup d'images. Si vous pensez que la stéganographie est intéressante, veuillez accepter mon défi !

Conseillé: