WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

La stéganographie par les images pour la sécurisation du transfert des messages

( Télécharger le fichier original )
par Richard ISHARA
Institut Superieur Pedagogique - Graduat 2008
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

CHAPITRE III : L'ELABORATION D'UN ALGORITHME DE

MARQUAGE DE TEXTE AU SEIN D'UNE IMAGE

BITMAP

III.1 LE MESSAGE A CODER

Dans le chapitre premier nous avons expliqué que les octets de l'image bitmap peuvent être codés en binaire, et dans le chapitre précédent nous venons de montrer comment le message en vue d'être camouflé derrière une image doit être converti en binaire, étant donné que l'image est constitué des pixels codés sur des octets et octets composés des bits.

De ce fait, le message ne laissera plus voir une distinction de ses caractères qu'une suite des bits car, même les espaces seront eux aussi convertis en binaire. Il suffit de découper le message caractère par caractères et mettre ceux-ci dans un tableau des entiers dont la taille doit être supérieur ou égale au nombre des pixels de l'image.

La méthode suivante nous aidera à faire cela :

static int[] messageAcoder(){

char[] t=new char[multiplicateur];

int[] Tableaumess=new int[multiplicateur];

for(int p=0;p<multiplicateur;p++){

t[p]=phrase.charAt(p);

Tableaumess[p]=(int)t[p];

}

return Tableaumess;

}

Le tableau qui est retourné ici, renvoi le code ASCII de chaque caractère les espaces inclus.

Pour bien illustrer cette méthode, Prenons l'exemple d'un petit message comme « Est tu là? Non» le tableau qui sera retourné quand l'utilisateur entre un tel message contiendra les nombres correspondants au code ASCII des caractères suivants:

32

69

115

116

32

116

117

32

108

224

63

32

78

111

110

(Tableau 4)

III. 2 LECTURE DE L'IMAGE

Tenons à signaler que l'image contenant déjà le message sera généralement envoyé en destination, il sera important pour nous de prévoir deux fichiers du format BMP : l'un, « Image de départ » contenant une image dont le contenu sera utilisé, et lu uniquement puis sera transporté dans trois tableaux de notre logiciel ; c'est à partir de ce logiciel que nous insérerons le message dans ces tableaux avant de les copier dans une autre image appelée « Image de destination » qui peut avoir des données primitives.

NB : a défaut de la deuxième image, celle-ci sera crée dès que l'on entrera un nom quelconque.

L'image appelée de destination contiendra immédiatement le contenu de la première additionnée du message.

La méthode suivante nous a servie de lire le fichier « Image de départ »:

public static void lireImage(String adresseImage){

entete=new int[16];

tabEntete=new int[28];

int[] matrisse=new int[multiplicateur*3];

int compteur=0;

try{

FileInputStream con=new FileInputStream(adresseImage);

BufferedInputStream fid=new BufferedInputStream(con);

DataInputStream dan=new DataInputStream(fid);

int a=dan.read();int b=dan.read();

if(a!=66||b!=77)

System.out.println("le fichier "+adresseImage+" ne contient pas une image bitmap");

for(int i=0;i<16;i++)entete[i]=dan.read();

a1=dan.read();b1=dan.read();c1=dan.read();d1=dan.read();

a2=dan.read();b2=dan.read();c2=dan.read();d2=dan.read();

largeur=a1+256*(b1+256*(c1+256*d1));

hauteur=a2+256*(b2+256*(c2+256*d2));

System.out.println("la largeur est"+largeur);

System.out.println("la hauteur est"+hauteur);

prOctet=new int[hauteur][largeur];

dxOctet=new int[hauteur][largeur];

trsOctet=new int[hauteur][largeur];

complement=largeur%4;

System.out.println("le complement par ligne est de "+largeur+" octets");

multiplicateur=hauteur*largeur;

System.out.println("Cette image permet le marquage de "+multiplicateur+" caracteres, les espaces

inclus");

javax.swing.JOptionPane.showMessageDialog(null,"VOUS DEVEZ ENTRER UN MESSAGE D'AU

MOINS "+multiplicateur+" CARACTERES INCLUS LES ESPACES VIDES");

for(int i=0;i<28;i++)tabEntete[i]=dan.read();

matrix=new int [multiplicateur*3];

for (int i=hauteur-1; i>=0; i--){

for(int j=0; j<largeur; j++){

prOctet[i][j]=dan.read(); dxOctet[i][j]=dan.read();

trsOctet[i][j]=dan.read();

matrix[compteur]=prOctet[i][j];compteur++;

matrix[compteur]=dxOctet[i][j];compteur++;

matrix[compteur]=trsOctet[i][j];compteur++;

}

for(int j=0; j<complement; j++) dan.read();

}

dan.close();

}catch(IOException e) {

System.out.println("Erreur dansla lecture de l'image");

}

}

Ce sont les tableaux prOctet[i][j],dxOctet[i][j] et trsOctet[i][j] qui contiennent les données relatives a l'image Initiale. Ceux-ci doivent contenir des entiers car les octets lus de l'image ont des valeurs entières.

Etant donné que le message à été traduit en une suite des valeurs entières et que les données lues de l'image sont entières, pourtant le camouflage doit se passer bit par bit, nous nous trouvons n'est-ce pas devant un problème ? Il nous faut donc travailler avec des nombres binaires. Le point suivant traitera comment résoudre ce problème.

précédent sommaire suivant






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"L'ignorant affirme, le savant doute, le sage réfléchit"   Aristote