III.5 INSERTION DES BITS DU MESSAGE EN VUE DU MARQUAGE
Au chapitre deux, nous avions donné un exemple
englobant les opérations d'insertion du message dans une image (II.4 LA
STEGANOGRAPHIE).
Ici-bas se trouve la méthode qui nous a servi de faire
cette tache aussi importante de notre logiciel
stéganographique :
public static int[] ecriturebin(int temp1,int temp2,int
temp3,int tmess){
int[] Ttemp1=converDecimalBinaire(temp1);
int[] Ttemp2=converDecimalBinaire(temp2);
int[] Ttemp3=converDecimalBinaire(temp3);
int[] mess=converDecimalBinaire(tmess);
int z=0;
for(int t=0;t<3;t++){
Ttemp1[t]=mess[z];
z++;
}
for(int q=0;q<3;q++){
Ttemp2[q]=mess[z];
z++;
}
for(int n=0;n<2;n++){
Ttemp3[n]=mess[z];
z++;
}
tableauret=new int[3];
tableauret[0]=coBinaireDdec(Ttemp1);
tableauret[1]=coBinaireDdec(Ttemp2);
tableauret[2]=coBinaireDdec(Ttemp3);
return tableauret;
}
Cette méthode recevra en arguments une liste des trois
valeurs représentant les trois octets codant un pixel et un, donnant le
caractère du message à insérer auprès de trois
octets. Le nombre des valeurs retournées par cette méthode seront
égaux que le nombre des valeurs à insérer dans le fichier
à envoyer. Aussi longtemps que la boucle prévue pour parcourir
les trois tableaux comportant les valeurs d'octets lues n'aura pas atteint la
fin, les valeurs retournées par la méthode
précédente qui comportent déjà le message seront
entrain d'être récupérées et insérées
dans un autre tableau en vue de l'écriture dans le fichier appelé
« Image destination ».
III.6 ECRITURE SUR L'IMAGE
Les valeurs qui sont traitées dans la méthode
précédente sont récupérées
immédiatement et mises dans un tableau afin d'être
insérés simplement au sein de l'Image de destination. Voici une
méthode qui nous a servi de le faire :
static void ecrireImage(String adresse){
try{
FileOutputStream stg=new FileOutputStream(adresse);
BufferedOutputStream nogra=new
BufferedOutputStream(stg);
DataOutputStream phie=new DataOutputStream(nogra);
phie.write(66);
phie.write(77);
for(int i=0;i<16;i++) phie.write(entete[i]);
phie.write(a1);phie.write(b1);phie.write(c1);phie.write(d1);
phie.write(a2);phie.write(b2);phie.write(c2);phie.write(d2);
complement=largeur%4;
for(int i=0;i<28;i++)phie.write(tabEntete[i]);
CacherTexte cd=new CacherTexte();
int kiba=0;
int []rasta=cd.ecritureBinaire();
CacherTexte pm=new CacherTexte();
System.out.println("");
System.out.println("complement"+complement);
for (int i=hauteur-1; i>=0; i--){
for(int j=0; j<largeur*3; j++){
phie.write(rasta[kiba]);
System.out.println(rasta[kiba]);
kiba++;
}
System.out.println(" ");
for(int j=0; j<complement; j++){
phie.write(0);
System.out.println(0);
}
}
System.err.println("L'ECRITURE EST TERMINEE AVEC
SUCCES");
phie.close();
}catch(IOException e) {
System.err.println("Erreur du camouflage dans l'image");
}
}
Le fichier « Image de destination »
détenant déjà le message caché aura visiblement par
l'oeil humain, les mêmes qualités que celles du fichier
appelé « Image Initiale », alors qu'en
réalité il y en a une différence.
|