Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INSERTION D'UN TEXTE DANS UN FICHIER BITMAP EN C


Information sur la source

Catégorie :Sécurité & Cryptage Niveau : Débutant Date de création : 23/04/2004 Vu / téléchargé: 3 270 / 249

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


Description

C'est un petit prog de stegano, pour qu'il marche, il faut mettre un .bmp renommer test.bmp dans le meme repertoire que l'application. La partie cryptage du texte avant insertion dans le bitmap est courte, en effet, je fait un complement a 1 sur chaque char avant de l'inserer.
 

Source

  • Voila le main.c
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include "stegano.h"
  • /* Le code ASCII de l'application est iso-latin-1 ou iso-8859-1
  • Dans cette norme, chaque caractere est codé sur 8 bits.
  • Chaque pixel d'un bitmap (en couleurs réelles, soit celle en 24 bits) est
  • composé de trois couleur codé chacune sur 8 bits.
  • Un fichier bitmap comprend en premier un en-tête de 54 octers avant l'image
  • proprement dite.
  • La technique est simple : j'ouvre le fichier dans un flux, je lit caractere par
  • caractere, ce qui me donne la valeur (de 0 a 255) de la couleur qui compose une
  • des trois couleur de l'image.
  • Imaginons que je veuille inserer la lettre "a" (0x61) donc 01100001 en binaire.
  • Le premier pixel est composé en RGB de 231, 12, 125.
  • Le deuxieme pixel est composé en RGB de 132, 156, 62.
  • Le troisieme pixel est composé en RGB de 128, 42, 23.
  • Je prend la premiere couleur du premier pixel : 231 donc 0xE7 ou 11100111b
  • Je change le dernier caractere de la suite binaire de la couleur et je le
  • change par le premier bit de la lettre a inserer soit 0. La sequence binaire
  • de cette couleur devient donc 11100110b soit 0xE6 ou 230.
  • Je réétere l'opération avec les deux couleurs suivantes, en incluant a chaque
  • fois le bit suivant de ma lettre. Le premier pixel est donc constituer de :
  • 130, 13, 125. On s'aperçoit que la derniere couleur n'est pas modifié : Ceci est
  • dû au fait que que le bit à changer de la même valeur que le troisième bit de la
  • lettre a insérer.
  • Ici, jai besoin de 8 couleurs pour coder la lettre "a", soit deux pixels et les
  • deux premières couleurs du pixel suivant.Un bitmap fait en moyenne 600000 octet.
  • Soit 600000/2 = 300000 couleurs = 100000 pixels.
  • Avec ceci, je peux coder un texte de 37500 caractères, ce qui déja pas mal...
  • ATTENTION, le nombre de bit pour coder une couleur peut varier, mais elle est
  • indiquer dans l'en-tête du bitmap.
  • */
  • int main(){
  • EnTeteFichier Entete;
  • int choix, i;
  • while (choix!=0){
  • system("cls");
  • printf("\n****************************************\n");
  • printf("************** MENU *****************\n");
  • printf("*****************************************\n");
  • printf("* 1 ) Inserer du texte *\n");
  • printf("* 2 ) Desinserer du texte *\n");
  • printf("* 3 ) Voir les informations sur l image *\n");
  • printf("* 0 ) Quitter *\n");
  • printf("*****************************************\n");
  • scanf("%d", &choix);
  • switch (choix){
  • case 1 : system("cls");
  • InsereTexte();
  • system("PAUSE");
  • break;
  • case 2 : system("cls");
  • RetireTexte();
  • system("PAUSE");
  • break;
  • case 3 : system("cls");
  • Entete = InfoImage();
  • i = Entete.TailleFichier-54;
  • printf("Le fichier fait %i octets\n", Entete.TailleFichier);
  • printf("L image mesure %i x %i pixels\n", Entete.LargeurImage, Entete.HauteurImage);
  • printf("L image fait %i octets, un texte de %i caractere peut etre inserer dedans\n", i, (i / 8));
  • system("PAUSE");
  • break;
  • case 0 : printf("Fin du programme\n");
  • break;
  • default : printf("erreur de saisie");
  • }
  • }
  • system("PAUSE");
  • return 0;
  • }
  • Voila le stegano.h
  • #include <stdio.h>
  • #include <stdlib.h>
  • //Structure d'entete de bmp
  • typedef struct{
  • char Signature[2];
  • unsigned int TailleFichier;
  • unsigned int Reserve;
  • unsigned int Offset;
  • unsigned int TailleEntete;
  • unsigned int LargeurImage;
  • unsigned int HauteurImage;
  • unsigned short int NombrePlan;
  • unsigned short int Profondeur;
  • unsigned int MethodeCompression;
  • unsigned int TailleImage;
  • unsigned int ResolutionHorizontale;
  • unsigned int ResolutionVerticale;
  • unsigned int NbreCouleurPalette;
  • unsigned int NbreCouleurImportante;
  • }EnTeteFichier;
  • void InsereTexte();
  • void RetireTexte();
  • EnTeteFichier InfoImage();
  • Voila le stegano.c
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include "stegano.h"
  • void InsereTexte(){
  • FILE * test;
  • FILE * dest;
  • int a;
  • char b;
  • int i;
  • int nbcaractere=0;
  • int bitfaible;
  • char * texte;
  • printf("Avant d inserer du texte, merci de verifier que vous avez bien");
  • printf(" placer un bitmap couleur \"vrai\" dans le meme repertoire que");
  • printf(" cette application. Merci de renommer votre bitmap en test.bmp\n");
  • fflush(stdin);
  • printf("Veuillez taper le texte a inserer dans l'image : ");
  • gets(texte);
  • nbcaractere=strlen(texte);
  • //ouverture des fichiers bmp
  • test=fopen("test.bmp","rb");
  • dest=fopen("dest.bmp","w+b");
  • if (test!=NULL){
  • system("cls");
  • // recopie de l'entete
  • for(i=0;i<54;i++){
  • fputc(fgetc(test),dest);
  • }
  • i=0;
  • //traitement stegano
  • while((a=fgetc(test))!=EOF){
  • if (i<nbcaractere){
  • b=texte[i];
  • b=crypte(b);
  • //Traitement du premier bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 128) == 128){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • fputc(a,dest);
  • a=fgetc(test);
  • //Traitement du deuxieme bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 64)==64){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • fputc(a,dest);
  • a=fgetc(test);
  • //Traitement du troisieme bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 32)==32){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • fputc(a,dest);
  • a=fgetc(test);
  • //Traitement du quatrieme bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 16)==16){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • fputc(a,dest);
  • a=fgetc(test);
  • //Traitement du cinquieme bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 8)==8){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • fputc(a,dest);
  • a=fgetc(test);
  • //Traitement du sixieme bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 4)==4){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • fputc(a,dest);
  • a=fgetc(test);
  • //Traitement du septieme bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 2)==2){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • fputc(a,dest);
  • a=fgetc(test);
  • //Traitement du dernier bit du caractere texte[i]
  • //prend le bit de poid faible de a
  • bitfaible=a & 1;
  • if ((b & 1)==1){
  • //Premier bit=0
  • if (bitfaible==0){
  • a=a+1;
  • }
  • }else{
  • //Premier bit=1
  • if (bitfaible==1){
  • a=a-1;
  • }
  • }
  • i++;
  • fputc(a,dest);
  • }else{
  • fputc(a,dest);
  • }
  • }
  • printf("\"%s\" a bien ete inserer dans l'image. Vous trouverez le resultat dans le bitmap dest.bmp\n",texte);
  • }else{
  • printf("Une erreur est survenue lors du fichier bitmap test.bmp\n");
  • printf("Ceci peut venir du fait que vous ne l avez pas placer");
  • printf(" dans le meme repertoire que l'application.\n");
  • }
  • fclose(test);
  • fclose(dest);
  • }
  • void RetireTexte(){
  • FILE * image;
  • int i;
  • char a;
  • char b=1;
  • int bitfaible;
  • int fin=0;
  • fflush(stdin);
  • printf("Avant de sortir le texte cache dans votre bitmap, merci de verifier ces points : \n");
  • printf(" - le bitmap est dans le meme repertoire que cette application\n");
  • printf(" - le bitmap est renomme en dest.bmp\n");
  • printf("\nMerci. Tout est ok ? (0 pou oui)");
  • scanf("%i", &i);
  • if (i==0){
  • system("cls");
  • //Sortie du texte
  • image=fopen("dest.bmp","rb");
  • for(i=0;i<54;i++){
  • fgetc(image);
  • }
  • i=0;
  • printf("Voici le texte cache dans le bitmap dest.bmp :\n");
  • while((a=fgetc(image))!=EOF){
  • if ((b!=0)&&(fin==0)){
  • b=0;
  • bitfaible=a&0x01;
  • b=b+(bitfaible*128);
  • a=fgetc(image);
  • bitfaible=a&0x01;
  • b=b+(bitfaible*64);
  • a=fgetc(image);
  • bitfaible=a&0x01;
  • b=b+(bitfaible*32);
  • a=fgetc(image);
  • bitfaible=a&0x01;
  • b=b+(bitfaible*16);
  • a=fgetc(image);
  • bitfaible=a&0x01;
  • b=b+(bitfaible*8);
  • a=fgetc(image);
  • bitfaible=a&0x01;
  • b=b+(bitfaible*4);
  • a=fgetc(image);
  • bitfaible=a&0x01;
  • b=b+(bitfaible*2);
  • a=fgetc(image);
  • bitfaible=a&0x01;
  • b=b+(bitfaible*1);
  • if(b!=0){
  • b=decrypte(b);
  • }
  • printf("%c",b);
  • }else{
  • fin=1;
  • }
  • i++;
  • }
  • printf("\n");
  • fclose(image);
  • }else{
  • printf("Sortie de la fonction. ");
  • }
  • }
  • EnTeteFichier InfoImage(){
  • FILE * image;
  • EnTeteFichier Entete;
  • image=fopen("dest.bmp","rb");
  • fread(&(Entete.Signature), 1, 2, image);
  • fread(&(Entete.TailleFichier), 4, 1, image);
  • fread(&(Entete.Reserve), 4, 1, image);
  • fread(&(Entete.Offset), 4, 1, image);
  • fread(&(Entete.TailleEntete), 4, 1, image);
  • fread(&(Entete.LargeurImage), 4, 1, image);
  • fread(&(Entete.HauteurImage), 4, 1, image);
  • fread(&(Entete.NombrePlan), 2, 1, image);
  • fread(&(Entete.Profondeur), 2, 1, image);
  • fread(&(Entete.MethodeCompression), 4, 1, image);
  • fread(&(Entete.TailleImage), 4, 1, image);
  • fread(&(Entete.ResolutionHorizontale), 4, 1, image);
  • fread(&(Entete.ResolutionVerticale), 4, 1, image);
  • fread(&(Entete.NbreCouleurPalette), 4, 1, image);
  • fread(&(Entete.NbreCouleurImportante), 4, 1, image);
  • fclose(image);
  • return Entete;
  • }
  • Voila le Cryptage.h
  • #include <stdio.h>
  • #include <stdlib.h>
  • int crypte(int lettre);
  • int decrypte(int lettre);
  • Voila le Cryptage.c
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include "Cryptage.h"
  • int crypte(int lettre){
  • return ~lettre;
  • }
  • int decrypte(int lettre){
  • return ~lettre;
  • }
Voila le main.c

#include <stdio.h>
#include <stdlib.h>
#include "stegano.h"
  
/* Le code ASCII de l'application est iso-latin-1 ou iso-8859-1
Dans cette norme, chaque caractere est codé sur 8 bits.
Chaque pixel d'un bitmap (en couleurs réelles, soit celle en 24 bits) est
composé de trois couleur codé chacune sur 8 bits.
Un fichier bitmap comprend en premier un en-tête de 54 octers avant l'image
proprement dite.
La technique est simple : j'ouvre le fichier dans un flux, je lit caractere par
caractere, ce qui me donne la valeur (de 0 a 255) de la couleur qui compose une
des trois couleur de l'image.
Imaginons que je veuille inserer la lettre "a" (0x61) donc 01100001 en binaire.
Le premier pixel est composé en RGB de 231, 12, 125.
Le deuxieme pixel est composé en RGB de 132, 156, 62.
Le troisieme pixel est composé en RGB de 128, 42, 23.
Je prend la premiere couleur du premier pixel : 231 donc 0xE7 ou 11100111b
Je change le dernier caractere de la suite binaire de la couleur et je le 
change par le premier bit de la lettre a inserer soit 0. La sequence binaire
de cette couleur devient donc 11100110b soit 0xE6 ou 230.
Je réétere l'opération avec les deux couleurs suivantes, en incluant a chaque
fois le bit suivant de ma lettre. Le premier pixel est donc constituer de :
130, 13, 125. On s'aperçoit que la derniere couleur n'est pas modifié : Ceci est
dû au fait que que le bit à changer de la même valeur que le troisième bit de la
lettre a insérer.
Ici, jai besoin de 8 couleurs pour coder la lettre "a", soit deux pixels et les 
deux premières couleurs du pixel suivant.Un bitmap fait en moyenne 600000 octet.
Soit 600000/2 = 300000 couleurs = 100000 pixels.
Avec ceci, je peux coder un texte de 37500 caractères, ce qui déja pas mal...
ATTENTION, le nombre de bit pour coder une couleur peut varier, mais elle est
indiquer dans l'en-tête du bitmap.
*/

int main(){
    EnTeteFichier Entete;
    int choix, i;
    while (choix!=0){
       system("cls");
       printf("\n****************************************\n");
       printf("**************   MENU   *****************\n");
       printf("*****************************************\n");
       printf("* 1 ) Inserer du texte                  *\n");
       printf("* 2 ) Desinserer du texte               *\n");
       printf("* 3 ) Voir les informations sur l image *\n");
       printf("* 0 ) Quitter                           *\n");
       printf("*****************************************\n");
       scanf("%d", &choix);
       switch (choix){
         case 1 : system("cls");
                  InsereTexte();
                  system("PAUSE");
         break;
         case 2 : system("cls");
                  RetireTexte();
                  system("PAUSE");
         break;
         case 3 : system("cls");
                  Entete = InfoImage();
                  i = Entete.TailleFichier-54;
                  printf("Le fichier fait %i octets\n", Entete.TailleFichier);
                  printf("L image mesure %i x %i pixels\n", Entete.LargeurImage, Entete.HauteurImage);
                  printf("L image fait %i octets, un texte de %i caractere peut etre inserer dedans\n", i, (i / 8));
                  system("PAUSE");
         break;
         case 0 : printf("Fin du programme\n");
         break;
         default : printf("erreur de saisie");   
       } 
    }
    system("PAUSE");	
    return 0;
}    


Voila le stegano.h

#include <stdio.h>
#include <stdlib.h>

//Structure d'entete de bmp
typedef struct{
    char Signature[2];
	unsigned int TailleFichier;
	unsigned int Reserve; 
	unsigned int Offset;	
 	unsigned int TailleEntete; 
	unsigned int LargeurImage;
	unsigned int HauteurImage;
	unsigned short int NombrePlan; 
	unsigned short int Profondeur; 
 	unsigned int MethodeCompression;
	unsigned int TailleImage; 
	unsigned int ResolutionHorizontale; 
	unsigned int ResolutionVerticale; 
	unsigned int NbreCouleurPalette; 
	unsigned int NbreCouleurImportante; 
}EnTeteFichier;

void InsereTexte();
void RetireTexte();
EnTeteFichier InfoImage();


Voila le stegano.c

#include <stdio.h>
#include <stdlib.h>
#include "stegano.h"

void InsereTexte(){
    FILE * test;
    FILE * dest;
    int a;
    char b;
    int i;
    int nbcaractere=0;
    int bitfaible;
    char * texte;
    printf("Avant d inserer du texte, merci de verifier que vous avez bien");
    printf(" placer un bitmap couleur \"vrai\" dans le meme repertoire que");
    printf(" cette application. Merci de renommer votre bitmap en test.bmp\n");
    fflush(stdin);
    printf("Veuillez taper le texte a inserer dans l'image : ");
    gets(texte);
    nbcaractere=strlen(texte);
    
       //ouverture des fichiers bmp
       test=fopen("test.bmp","rb");
       dest=fopen("dest.bmp","w+b");
       if (test!=NULL){
          system("cls");
          // recopie de l'entete
          for(i=0;i<54;i++){
             fputc(fgetc(test),dest);
          }
          i=0;
          //traitement stegano
          while((a=fgetc(test))!=EOF){
             if (i<nbcaractere){
                b=texte[i];
                b=crypte(b);
                //Traitement du premier bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 128) == 128){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                fputc(a,dest);
                a=fgetc(test);
           
                //Traitement du deuxieme bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 64)==64){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                fputc(a,dest);
                a=fgetc(test);
           
                //Traitement du troisieme bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 32)==32){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                fputc(a,dest);
                a=fgetc(test);
              
                //Traitement du quatrieme bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 16)==16){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                fputc(a,dest);
                a=fgetc(test);           
           
                //Traitement du cinquieme bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 8)==8){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                fputc(a,dest);
                a=fgetc(test);           
          
                //Traitement du sixieme bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 4)==4){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                fputc(a,dest);
                a=fgetc(test);           
           
                //Traitement du septieme bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 2)==2){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                fputc(a,dest);
                a=fgetc(test);           
          
                //Traitement du dernier bit du caractere texte[i]
                //prend le bit de poid faible de a
                bitfaible=a & 1;
                if ((b & 1)==1){
                   //Premier bit=0
                   if (bitfaible==0){
                      a=a+1;
                   }
                }else{
                   //Premier bit=1
                   if (bitfaible==1){
                      a=a-1;
                   }
                }
                i++;
                fputc(a,dest);
             }else{
                fputc(a,dest);
             }
          }
          printf("\"%s\" a bien ete inserer dans l'image. Vous trouverez le resultat dans le bitmap dest.bmp\n",texte);
       }else{
          printf("Une erreur est survenue lors du fichier bitmap test.bmp\n");
          printf("Ceci peut venir du fait que vous ne l avez pas placer");
          printf(" dans le meme repertoire que l'application.\n");
       }
       fclose(test);
       fclose(dest);
      
}

void RetireTexte(){
    FILE * image;
    int i;
    char a;
    char b=1;
    int bitfaible;
    int fin=0;
    fflush(stdin);
    printf("Avant de sortir le texte cache dans votre bitmap, merci de verifier ces points : \n");
    printf(" - le bitmap est dans le meme repertoire que cette application\n");
    printf(" - le bitmap est renomme en dest.bmp\n");
    printf("\nMerci. Tout est ok ? (0 pou oui)");
    scanf("%i", &i);
    if (i==0){
    system("cls");
    //Sortie du texte
    image=fopen("dest.bmp","rb");
    for(i=0;i<54;i++){
       fgetc(image);
    }
    i=0;
    printf("Voici le texte cache dans le bitmap dest.bmp :\n");
    while((a=fgetc(image))!=EOF){
        if ((b!=0)&&(fin==0)){
           b=0;
           bitfaible=a&0x01;
           b=b+(bitfaible*128);
           a=fgetc(image);
           bitfaible=a&0x01;
           b=b+(bitfaible*64);
           a=fgetc(image);
           bitfaible=a&0x01;
           b=b+(bitfaible*32);
           a=fgetc(image);
           bitfaible=a&0x01;
           b=b+(bitfaible*16);
           a=fgetc(image);           
           bitfaible=a&0x01;
           b=b+(bitfaible*8);
           a=fgetc(image);           
           bitfaible=a&0x01;
           b=b+(bitfaible*4);
           a=fgetc(image);           
           bitfaible=a&0x01;
           b=b+(bitfaible*2);
           a=fgetc(image);           
           bitfaible=a&0x01;
           b=b+(bitfaible*1);
           if(b!=0){
             b=decrypte(b);
           }
           printf("%c",b);
        }else{
           fin=1;
        }
        i++;
    }
    printf("\n");
    fclose(image);    
    }else{
    printf("Sortie de la fonction. ");
    }
}

EnTeteFichier InfoImage(){
    FILE * image;
    EnTeteFichier Entete;
    image=fopen("dest.bmp","rb");
    fread(&(Entete.Signature), 1, 2, image);
	fread(&(Entete.TailleFichier), 4, 1, image);
	fread(&(Entete.Reserve), 4, 1, image);
	fread(&(Entete.Offset), 4, 1, image);
	fread(&(Entete.TailleEntete), 4, 1, image);
	fread(&(Entete.LargeurImage), 4, 1, image);
	fread(&(Entete.HauteurImage), 4, 1, image);
	fread(&(Entete.NombrePlan), 2, 1, image);
	fread(&(Entete.Profondeur), 2, 1, image);
	fread(&(Entete.MethodeCompression), 4, 1, image);
    fread(&(Entete.TailleImage), 4, 1, image);
	fread(&(Entete.ResolutionHorizontale), 4, 1, image);
	fread(&(Entete.ResolutionVerticale), 4, 1, image);
	fread(&(Entete.NbreCouleurPalette), 4, 1, image);
	fread(&(Entete.NbreCouleurImportante), 4, 1, image);
    fclose(image);
    return Entete;    
}

Voila le Cryptage.h

#include <stdio.h>
#include <stdlib.h>

int crypte(int lettre);
int decrypte(int lettre);


Voila le Cryptage.c

#include <stdio.h>
#include <stdlib.h>
#include "Cryptage.h"

int crypte(int lettre){
return ~lettre;
}

int decrypte(int lettre){
return ~lettre;
}



Conclusion

Ca a été codé avec dev-c++.
Bon, ce prog est simple, il sert simplement a montrer que la manipulation des bits n'est vraiment pas compliqué. Si vous avez des remarques, ou des améliorations a faire, n'hésitez pas a me les faire remarquer
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de djl le 23/04/2004 20:29:52

pas mal, ca marche bien

qqchoses sur le code, remplace des printf du menu par des puts (sans '\n') c'est plus rapide a l'execution (utilise printf uniquement qd tu veut afficher autre chose que du char* )

tu peux aussi remplacer unsigned int par unsigned et unsigned short int par unsigned short, int est le type par defaut en c

enleve les fflush(stdin) (sert a rien) et saisie tes chaines avec scanf ou autre (avec fflush(stdout) avant), mais surtout sur un buffer que tu a alouer
au fait c'est quoi pour toi char *text; une chaine de caractere ?

signaler à un administrateur
Commentaire de fab30 le 24/04/2004 09:07:36

Oui, char * texte est une suite de caractère. Le pointeur texte pointe sur la premiere lettre de cette suite. Comme je l'ai expliqué sur le forum, la saisie de ma chaine de caractere se fait avec gets pour autoriser la saisie des espaces, chose que je ne peux pas faire avec scanf. Pour les fflush, il me semble qu'il faut que je repense le choix du type de mes variable afin de l'utiliser correctement.

signaler à un administrateur
Commentaire de djl le 24/04/2004 09:38:01

oui vausx mieus saisir avec gets, mais text pointe sur quoi?

regarde du declare char *texte; et apres tu fais direct gets(texte); sans allouer de buffer ??

signaler à un administrateur
Commentaire de lastpixl le 26/04/2004 20:57:22

Pas mal... Mais il ne peut pas encoder beaucoup de données !

Par exemple il n'encode que sur un bit et trois couleurs. Tu pourrais mettre en place un système d'optimisation de la dégradation : passer après 1 bit à 2, 3, 4... à 2 bits, ca ne se voit pas (tests a l'appui).
Et tu pourrais rajouter un offset qui dirait au début de l'encodage combien de bits sont cachés, pour ne pas tout dégrader.
Et aussi un petit cryptage pour rendre les bits codés encore plus indetectables...

Mais sinon c'est pas mal.
Je posterai le mien quand j'aurai fini mon TPE sur la stéganographie...

signaler à un administrateur
Commentaire de fab30 le 27/04/2004 19:02:42

Ton TPE sur la steganographie... C'est quoi ca TPE

signaler à un administrateur
Commentaire de lastpixl le 27/04/2004 21:35:28

Travaux Personnels Encadrés... au lycée, des recherches sur un sujet qui nous intéressent avec production écrite et présentation orale...
J'ai pris la stéganographie et j'ai fait un prog la-dessus (pas tout à fait terminé c pour ca que je ne l'ai pas encore posté...)

+++,
Lastpix'l

signaler à un administrateur
Commentaire de lunarossa le 10/06/2005 14:53:06

c'est bombien de bit un bmp couleur vrai ?

signaler à un administrateur
Commentaire de fab30 le 10/06/2005 20:24:22

24 bit. Regarde ce lien il explique bien
http://www.commentcamarche.net/video/format-bmp.php3

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.