begin process at 2012 05 30 19:41:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

s il vous plait g besoin d aide vite pour mon projet....§§§§§


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

s il vous plait g besoin d aide vite pour mon projet....§§§§§

jeudi 24 mars 2005 à 03:07:31 | s il vous plait g besoin d aide vite pour mon projet....§§§§§

greamlens

s il vous plait g besoin d une solution pour un projet qui consiste a inserer un message caché en binaire sur les bits les moins significatifs
je crois qu il y a un probleme de memoire pour le tableau
aidez moi a trouver une solution merci


#include <iostream>
#include <fstream>
#include <string>//utiliser .size()
#include <cmath>//utiliser pow(,)
using namespace std;

//declaration de la structure pour lire l entete de photo
struct type_entete_photo
{
  unsigned short Type_Fichier;
  unsigned long  TailleFichier;
  unsigned short Reserve1;
  unsigned short Reserve2;
  unsigned long  DecalageBitsImage;
  unsigned long  TailleEnteteInfo;
  unsigned long  DimX;
  unsigned long  DimY;
  unsigned short NombredePlans;
  unsigned short NombreBitsParPixels;
  unsigned long  A_Compresser;
  unsigned long  DimensionImage_Decompressee;
  unsigned long  ResX;
  unsigned long  ResY;
  unsigned long  NombreCouleurs;
  unsigned long  NombreCouleurs_Importantes;
};

//prototypes de fonctions
bool Lire_photo ( string &Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo &entete_photo);
void Afficher_Entetes ( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo);
bool Insertion_Message( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo);
void Decodage_Message( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo);
bool Sauvgarde_Image( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo);

 

bool Lire_photo ( string &Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo &entete_photo)
{
    ifstream fic_binlu;//declaration du fichier en lecture
 int i,j,Divise_Nboctets;//compteurs
 

 cout<<"entrer le nom du fichier BMP : ";
 cin>>Nom_Fichier_BMP;

 

 fic_binlu.open(Nom_Fichier_BMP.c_str(),ios::binary|ios::in|ios::out);//ouverture fichier ecriture lecture
 
 if (fic_binlu.fail())//erreur d ouverture
 {
  cout<<"il y a erreur d ouverture du fichier bmp"<<endl;
     return(false);
 }
 else
 {
  //lecture d entete
     fic_binlu.read((char*) & entete_photo.Type_Fichier,sizeof(unsigned short));
  fic_binlu.read((char*) & entete_photo.TailleFichier,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.Reserve1,sizeof(unsigned short));
  fic_binlu.read((char*) & entete_photo.Reserve2,sizeof(unsigned short));
  fic_binlu.read((char*) & entete_photo.DecalageBitsImage,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.TailleEnteteInfo,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.DimX,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.DimY,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.NombredePlans,sizeof(unsigned short));
  fic_binlu.read((char*) & entete_photo.NombreBitsParPixels,sizeof(unsigned short));
  fic_binlu.read((char*) & entete_photo.A_Compresser,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.DimensionImage_Decompressee,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.ResX,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.ResY,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.NombreCouleurs,sizeof(unsigned long));
  fic_binlu.read((char*) & entete_photo.NombreCouleurs_Importantes,sizeof(unsigned long));
  
  if (entete_photo.Type_Fichier!=19778)//verifie type photo
  {
   cout<<"le fichier n est pas un fichier bmp"<<endl;
  
   return(false);
  }
  else
  { 
   if (entete_photo.NombreBitsParPixels!=24)//verifie nombre pixel photo
   {
    cout<<"le nombre de bits par pixel n est pas valide pour cette image"<<endl;
   
    return(false);
   }
   else
   {
    if (entete_photo.A_Compresser!=0)//verifie compression photo
    {
     cout<<"l image est compresse donc n est pas valide"<<endl;
    
     return(false);
    }
    else
    {
     if ((entete_photo.DimX==0)||(entete_photo.DimY==0)||(entete_photo.DimX>512)||(entete_photo.DimY>512))//verifie dimension photo
     {
      cout<<"les dimensions de l image sont invalides"<<endl;
     
      return(false);
     }
     else
     {
      Divise_Nboctets=(4-((3*entete_photo.DimX)%4));//verifie le nombre d octets de chaque ligne est divisible par 4
       
      for(i=0;i<(entete_photo.DimY*entete_photo.DimX);i++)//boucle for pour remplir un tableau[nombre de pixels total][canaux de couleurs]
      {
       if(((i%entete_photo.DimX)==0)&(i!=0))
        //sauter par dessus le bourrage
        fic_binlu.seekg(Divise_Nboctets*sizeof(unsigned char),ios::cur);
       else
        for(j=0;j<3;j++)
         fic_binlu.read((char*) &tableau[i][j],sizeof(unsigned char));//lecture du fichier binaire variable par variable              
      }
      
      
      return(true);

     }
    }
   }
  }
 }
 fic_binlu.close();
}

 

 


void Afficher_Entetes ( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo )
{
 //affichage des données de l entete de la photo
   cout<<"Informations sur le fichier:"<<endl;
   cout<<"Nom du fichier:"<<Nom_Fichier_BMP<<endl;
   cout<<"Dimension de l'image en X:"<<entete_photo.DimX<<endl;
   cout<<"Dimension de l'image en Y:"<<entete_photo.DimY<<endl;
   cout<<"Codage des couleurs(Nombre de bits par pixel):"<<entete_photo.NombreBitsParPixels<<endl;
   cout<<"Nombre maximum de caracteres que peut contenir le message cache:"
    //nombre de caracteres maximum=nombre de pixels/8 moins 32pixels de l entete de message moins les 8pixels du \0
    <<(((entete_photo.DimX*entete_photo.DimY)/8)-32-8)
    <<endl;
   if (entete_photo.A_Compresser==0)//verifie compression de la photo
    cout<<"Compression:Inactive"<<endl;
   else
    cout<<"Compression:Active"<<endl;
 
}

 

 

bool Insertion_Message( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo)
{
 string chaine;
 int k=0,i,j,Tab[512*512]/*tableau qui va contenir les bits des caracteres*/,nbr=0;
 int couleur_canal;


 
  do//verifie la validité du nombre de caracteres a entrer
  {
   cout<<"entrer la chaine de caractere a cacher dans l image"<<endl
    <<"le nombre de caractere de la chaine ne doit pas depasser "<<(((entete_photo.DimX*entete_photo.DimY)/8)-32-8)<<endl;
   getline(cin,chaine);//lire la phrase complete
  }
  while (chaine.size()>(((entete_photo.DimX*entete_photo.DimY)/8)-32-8));

  for(i=0;i<chaine.size();i++)//parcourir chaque caractere de la chaine
   for(j=7;j>=0;j--)//convertir chaque caractere en binaire
   {
    nbr=pow(2,i);
    Tab[k]=((int(chaine[i])/nbr)%2);//mettre chaque bits du caractere dans une case du tableau TAB
    k++;
   }

  cout<<"choisissez le canal de couleur sur lequel vous allez mettre le message a cacher"<<endl;
  do//verifie la validité du canal de couleur choisi
  {
   cout<<"entrer 0 pour bleu,1 pour vert,2 pour rouge";
   cin>>couleur_canal;
  }
  while((couleur_canal!=0)||(couleur_canal!=1)||(couleur_canal!=2));

  //remplace les 32premiers pixels pour chaque canal par des 0(zero)
  for (i=0;i<32;i++)
  {
   for (j=0;j<3;j++)
   {
    if ((tableau[i][j])%2!=0)
     tableau[i][j]--;
   }
  }
  //inserer le message secret
  for (i=0;i<32+(chaine.size()*8);i++)//parcourir les pixels
  {
   if (i<32)//condition sur le numero du pixel
   { //pour les 32 premier pixels et pour un canal choisi remplacer les anciens bits par une suite de 1 et de 0
    if ((i%2)==0)
    {
     if ((tableau[i][couleur_canal]%2)==0)
     {
      tableau[i][couleur_canal]++;
     }
    }
    else
    {
     if ((tableau[i][couleur_canal]%2)!=0)
     {
      tableau[i][couleur_canal]--;
     }
    }
   }
   else
   { //pour les pixels suivants inserer les bits des caracteres de la chaine
    if (Tab[i-32]!=0)
    { //si le code de pixel est paire et que le bits du caractere est impaire
     if ((tableau[i][couleur_canal]%2)==0)
     {
      tableau[i][couleur_canal]++;//ajouter 1 au code du pixel
     }
    }
    else
    { //si le code de pixel est impaire et que le bits du caractere est paire
     if ((tableau[i][couleur_canal]%2)!=0)
     {
      tableau[i][couleur_canal]--;//ajouter 1 au code du pixel
     }
    }
   }
  }
  //inserer la fin du message qui est le \0(une suite de 0 sur 8 pixels)
  for (i=(32+(chaine.size()*8));i<(32+8+(chaine.size()*8));i++)
  {
   if ((tableau[i][couleur_canal]%2)!=0)
   {
    tableau[i][couleur_canal]--;
   }
  }
 return(true);
}

void Decodage_Message( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo)
{
 int i,j,k,code=0,Tab[512*512];
 bool resultat=true;
 
 
  for ( k=0;k<3;k++)
  {
   for (i=0;i<32;i++)
   {
    for (j=0;j<3;j++)
    {
     if(j==k)
     {
      if ((i%2)==0)
      {
       if ((tableau[i][j]%2)==0)
       {
        resultat=false;
        break;
       }
        
      }
      else
      {
       if ((tableau[i][j]%2)!=0)
       {
        resultat=false;
        break;
       }
      }
     }
     else
      if (tableau[i][j]%2!=0)
      {
       resultat=false;
       break;
      }
    }
    if(resultat==false)
     break;
   }
  
   if ( resultat==true)
   {
    for (i=32;i<(entete_photo.DimX*entete_photo.DimY);i++)
    {
     if (tableau[i][k]%2!=0)
      Tab[i-32]=1;
     else
      Tab[i-32]=0;
    }
    j=7;
    cout<<"le message caché est : "<<endl;
    for(i=0;i<((entete_photo.DimX*entete_photo.DimY)-32);i++)
    {
     if (j<0)
     {
      if (char(code)==0)
       break;
      else
      {
       cout<<char(code);
       code=0;
       j=7;
      }
     }
     else
     {
      code=code+pow(Tab[i]*2,j);
      j--;
     }
    }
    
   }
   break;
  }
 
 if ( resultat==false)
  cout<<"le fichier BMP ne contient pas de message cache"<<endl;
  
}

bool Sauvgarde_Image( string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo)

{
 string Nouveau_Nom;
 ofstream fic_binecrit;
 int Divise_Nboctets;
 int i,j;
 
  do
  {
   cout<<"entrer un nouveau nom pour l image :";
   cin>>Nouveau_Nom;
  }
  while
   (Nouveau_Nom==Nom_Fichier_BMP);
  
  fic_binecrit.open(Nouveau_Nom.c_str(),ios::binary);
  if (fic_binecrit.fail())//erreur d ouverture
  {
   cout<<"il y a erreur d ouverture du fichier en ecriture"<<endl;
   return(false);
  }
  else
  {
   fic_binecrit.write((char*) &entete_photo,sizeof(type_entete_photo));

   Divise_Nboctets=(4-((3*entete_photo.DimX)%4));//verifie le nombre d octets de chaque ligne est divisible par 4

   for(i=0;i<(entete_photo.DimY*entete_photo.DimX);i++)
    {
     if(((i%entete_photo.DimX)==0)&(i!=0))
      //bourrer avec des zeros
      for (j=0;j< Divise_Nboctets;j++)
       fic_binecrit.write((char*) 0,sizeof(unsigned char));
     else
      for(j=0;j<3;j++)
       fic_binecrit.write((char*) &tableau[i][j],sizeof(unsigned char));//ecriture du fichier binaire variable par variable
    }

   return(true);
  }
}


 //   Menu
void main(string Nom_Fichier_BMP,unsigned char tableau[512*512][3],type_entete_photo entete_photo)
{
 char choix; 
 bool Lecture=false,Insert=false,Sauve=false,Quit=false;
 char reponse1,reponse2,reponse3,reponse4;

 cout<<"Logiciel de steganographie : Stegan \n"
  <<"Developpeur:    Ben Amara Fares \n";
 cout<<"prog de menu: \n";

 do{

  //system("cls");
  cout<<"entrez choix ? : \n";
  cout<<" 1 - Lire une image(charger un fichier BMP en memoire vive) \n";
  cout<<" 2 - Afficher les informations sur le fichier charge  \n";
  cout<<" 3 - Inserer un message cache \n";
  cout<<" 4 - decoder le message cache \n";
  cout<<" 5 - Sauvgarder la nouvelle image avec message cache \n";
  cout<<" 6 - Quitter le programme \n";
  
  cin>>choix;

  switch(choix)
  {
   case '1' : if (Lecture==true)
      {
       do
       {
        cout<<"vous avez deja une image charge en memoire."
         <<"si vous voulez l ecraser tapez O sinon tapez N:";
        cin>>reponse1;
       }
       while
       ((toupper(reponse1)!='O')&(toupper(reponse1)!='N'));

       if (toupper(reponse1)=='O')
       {
        if ( Insert==true)
        {
         do
         {
          cout<<"voulez vous sauvgarder l image-tapez O pour oui et N pour non:";
          cin>>reponse2;
         }
         while
          ((toupper(reponse2)!='O')&(toupper(reponse2)!='N'));
         
         if (toupper(reponse2)=='O')
         {
          Sauve=Sauvgarde_Image(Nom_Fichier_BMP,tableau,entete_photo);
          
         }
        }
       }
         
      }
     Lecture=Lire_photo (Nom_Fichier_BMP,tableau,entete_photo);
     break;

   case '2' :
     if ( Lecture==true)
     {
      Afficher_Entetes (Nom_Fichier_BMP,tableau,entete_photo);
     }
     else
      cout<<"vous n avez pas le droit de selectionner cette option"<<endl
       <<"il n y a aucun fichier BMP valide charge dans la memoire"<<endl;
     break;
   case '3' :

     if ( Lecture==true)
     {
      Insert=Insertion_Message(Nom_Fichier_BMP,tableau,entete_photo);
     }
     else 
      cout<<"vous n avez pas le droit de selectionner cette option"<<endl
       <<"il n y a aucun fichier BMP valide charge dans la memoire"<<endl;
     
     
     break;
   case '4' :
     if ( Lecture==true)
     {
      Decodage_Message(Nom_Fichier_BMP,tableau,entete_photo);
     }
     else 
      cout<<"vous n avez pas le droit de selectionner cette option"<<endl
       <<"il n y a aucun fichier BMP valide charge dans la memoire"<<endl;
   
     break;
   case '5' :
     if ( Insert==true)
     {
            Sauve=Sauvgarde_Image(Nom_Fichier_BMP,tableau,entete_photo);
     }
     else
      cout<<"vous n avez pas le droit de selectionner cette option"<<endl
       <<"il n y a pas eu insertion d un message cache.Inserer un message puis sauvgarder."<<endl;
      
     break;
   case '6' :
         

      cout<<"Voulez vous vraimment quittez le programme \n"
       <<"entrer O pour oui et N pour non:";
      cin>>reponse3;
      

      if (toupper(reponse3)=='O')
      {
       if ((Insert==true)&(Sauve==false))
       {
        cout<<"voulez vous sauvgardez avant de quitter"
         <<"entrer O pour oui et N pour non:";
        cin>>reponse4;
        if (toupper(reponse4)=='O')
        {
         Sauve=Sauvgarde_Image(Nom_Fichier_BMP,tableau,entete_photo);
         
        }
       }
       Quit=true;
      }
         
  
      break;
  
 }


 }while(Quit==false);
 


}

 

 

 

 

 

 

 

 



Cette discussion est classée dans : photo, char, cout, entete, unsigned


Répondre à ce message

Sujets en rapport avec ce message

pb avec conio je cher cherche l'erreur( j'ai merde sur le mess precedent) [ par kin ] portpia.cpp#include"PortPiaPc.h"void main(){ PortPiaPc inst; inst(0x320,0x0f);}PortPiaPc.cpp#include "PortPiaPc.h"#include "conio.h"PortPiaPc::PortPia Dans le genre prenant........ [ par Xs ] oui !c 'est trés chiant !j'explique mon pb : j'ai un code source, fais par moi-meme, et dedans, je veux que l'on saisisse des renseignement comme le l probleme sur une classe [ par NerOcrO ] Voici mon code :#include #include class Chanson //classe Chanson{ public: int Duree; char TypeDeFichier[3], Auteur[50], Titre[50], Interprete[50 Ecriture/lecture dans un fichier [ par SneakGuy ] Haaa... Merci, sa m'a aider... Enfin, j'ai encore plusieurs problemes...pour l'ecriture j'ai quelque chose qui ressemble a sa:char user[20];char pass[ Pointeurs sur des tableaux de plusieurs dimensions [ par ProGamer ] J'ai besoin de faire des pointeurs sur ce genre de tableaux. Voici comment je m'y prends (et surtout, voici comment ça ne marche pas...):unsigned char char* to unsigned char* [ par rodrigos ] comment peut-on convertir un char* en unsigned char*?à quoi correspond un unsigned char*?Merci pour votre aide!! struct [ par ready4 ] Je ne sais pas comment initialiser mes moteurs //intialisation moteursM1 = {2, 1, 1, 2, 0, 0, 120};M2 = {8, 4, 4, 8, 0, 0, 80};M3 = {32, 16, 16, 32, 0 pb avec variable [ par jeffise57 ] Please aidez moiJe reçoit comme arugument du fonction des variables unsigned char* et je doit passer dans une deuxième fonction les même arguments mai j'ai commencé un sof mais je bloque ! :( [ par xionoxid ] Voilà quand je demande rentré le pass si il met "a" alors ça devrait faire login = rien; mais le probleme c'est que meme si je met a et ça fait PAS lo Sniffing - raw socket [ par krum ] J'ai essayé de coder un programme capable de me donner la description de l'en tete IP et TCP des packets que je reçois d'une certaine IP,mais lorsque


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales