llyudy SCruel | Bonjour / bonsoir
Pour mon projet de fin d'année (je dois le rendre le 13), je dois réaliser une stéganographie, cacher du texte dans une image (j'ai déjà réaliser l'image caché dans une autre), le code est commenté par mon prof, le problème c'est que je n'ai pas le temps de reprendre l'algo à zéro sachant que je suis un peu perdu malgré toutes mes recherches et tentatives de résolution, j'ai besoin de conseils rapidement, si possible, merci d'avance à ceux qui me répondront
Je précise que je me sert de la classe ISNImage, une classe que nous a refilé le prof en début d'année et qui nous évite de coder tous les BufferedImage etc, je peux la poster si besoin.
Voici donc mon code :
Code :
- public static ISNImage code(ISNImage img, String message){
- // Affectation des dimensions
- int largeur = img.largeur();
- int hauteur = img.hauteur();
-
- // on crée une image img1 de même dimension que img (image couverture)
- ISNImage img1 = new ISNImage(largeur,hauteur);
-
- // Conversion du message en binaire
- message = "Je suis un texte cache";
- String chaine = "";
- for (int i = 0 ; i < message.length() ; i++){
- int ascii = (new Character(message.charAt(i))).hashCode();
- String binaryString = Integer.toBinaryString(ascii);
- chaine += binaryString;
- }
- // cette partie là ne sert visiblement à rien, puisque tu n'utilises pas la valeur de chaîne dans la suite.
-
- for (int j = 0 ; j < hauteur && j < message.length() ; j++){
- for (int i = 0 ; i < largeur && i < message.length() ; i++){
- // c'est ici le problème, les conditions d'arrêt des boucles "for" font n'importe quoi!
- int[] rgb = img.getPixel(i, j);
- int rouge = rgb[0] & 240; // On remet à zéro les 4 bits de droite pour le canal rouge
- int vert = rgb[1]; // Là non car on ne va rien cacher de dans
- int bleu = rgb[2] & 240; // Idem que pour le canal rouge
-
-
- for(i = 0 ; i < message.length() ; i++){ // on parcourt la chaine caractere par caractere
- // tu caches donc la totalité de ton message dans une seule colonne puisque j garde une valeur constante dans cette boucle,
- // donc là aussi, gros problème : le ième caractère du message doit être caché dans un pixel de coordonnées (x;y)
- // Il faut que tu trouves la bonne relation entre i et (x;y). y n'est certainement pas constamment égal à j
- char first = message.charAt(i);
-
- int rouge1 = first >> 4;
- int vert1 = first;
- int bleu1 = first >> 4;
-
- int r = rouge | rouge1;
- int v = vert | vert1;
- int b = bleu | bleu1;
-
- img1.putPixel(i, j,r,v,b);
-
- }
-
-
- }
- }
- return img1;
- }
- Il te faut reprendre l'algorithme à partir de zéro ... bon courage
|
|