begin process at 2012 05 30 11:45:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

steganographie C


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

steganographie C

vendredi 21 mai 2004 à 17:19:26 | steganographie C

trypon

Bonjour je programme sous ggcc (LINUX) et j'ai un petit pb avec mon programme j'arrive a mettre un texte dans l'image mais pas à faire le contraire
la fonction qui ne marche pas s'appelle retrievemessage
merci d'avance pour votre aide



#include <stdio.h>


typedef struct BMP_HEADER {
char identifier [2];
int filesize;
int reserved;
int dataoffset;
int headersize;
int width;
int height;
short int planes;
short int bitsperpixels;
int compression;
int bitmapdatasize;
int hresolution;
int vresolution;
int colors;
int importantcolors;
} BMP_HEADER;


int loadBitmapHeader (FILE *fichier, BMP_HEADER *entete) {

int res;

res = fread (&(entete -> identifier[0]), 1, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> identifier[1]), 1, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> filesize), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> reserved), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> dataoffset), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> headersize), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> width), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> height), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> planes), 2, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> bitsperpixels), 2, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> compression), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> bitmapdatasize), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> hresolution), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> vresolution), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> colors), 4, 1, fichier);
if (res != 1)
return 0;

res = fread (&(entete -> importantcolors), 4, 1, fichier);
if (res != 1)
return 0;

return 1;


}

int isBitmapHeaderCorrect (BMP_HEADER *header) {

if (header -> identifier[0] != 'B')
return 0;

if (header -> identifier[1] != 'M')
return 0;

if (header -> compression != 0)
return 0;

if (header -> bitsperpixels != 24)
return 0;

if (header -> bitmapdatasize != 3 * (header -> width) * (header->height))
return 0;



return 1;
}

int getBit (char *m, int n) {
char foo;
int i;
int res;

if ((n >= 0) && (n <= 8* strlen(m))){
foo = m [n/8];
for (i = 0; i < (7 - (n%8)); i++)
foo >>= 1;
if (foo%2 == 0)
res = 0;
else res = 1;
return res;
}
else return 0;

}

unsigned char * loadBitmapDatas(FILE *fichier, BMP_HEADER *header){

unsigned char * res = (unsigned char *) malloc(header->bitmapdatasize);

if (fread(res, 1 ,header->bitmapdatasize,fichier) != (header->bitmapdatasize))
return NULL ;

return res ;
}

int saveBitmapDatas(FILE *fichier, BMP_HEADER *header, unsigned char *pixels){

int res;



res = fwrite(header->identifier,1,2,fichier) ;


res = fwrite(&(header->filesize), 4,1,fichier) ;


res = fwrite(&(header->reserved), 4,1,fichier) ;


res = fwrite(&(header->dataoffset), 4,1,fichier) ;


res = fwrite(&(header->headersize), 4,1,fichier) ;


res = fwrite(&(header->width), 4,1,fichier) ;


res = fwrite(&(header->height), 4,1,fichier) ;


res = fwrite(&(header->planes),2,1,fichier) ;


res = fwrite(&(header->bitsperpixels),2,1,fichier) ;


res = fwrite(&(header->compression), 4,1,fichier) ;


res = fwrite(&(header->bitmapdatasize), 4,1,fichier) ;


res = fwrite(&(header->hresolution), 4,1,fichier) ;


res = fwrite(&(header->vresolution), 4,1,fichier) ;


res = fwrite(&(header->colors), 4,1,fichier) ;


res = fwrite(&(header->importantcolors), 4,1,fichier) ;


res = fwrite(pixels, 1 ,header->bitmapdatasize,fichier);


return 1;
}


int hideMessage (char *source, char *dest, char *message) {

FILE *fd = fopen (source, "r");
FILE *fd2 = fopen (dest, "w");
BMP_HEADER entete;
unsigned char *res;
int b;
int i;


loadBitmapHeader (fd, &entete);
res = loadBitmapDatas(fd, &entete);


for (i = 1; i <= (1 + strlen (message)) * 8; i++){

b = getBit (message, i);

if (res[i]%2 != b)
if (b == 1)
res[i]++ ;
else res[i]-- ;
}


saveBitmapDatas(fd2, &entete, res);
return 1;
}

/*char * retrieveMessage (char *source, char *original) { /*ne fonctionne pas !!*/

/* FILE *fd = fopen (source, "r");
FILE *fd2 = fopen (original, "r");
BMP_HEADER entete;
unsigned char *res = loadBitmapDatas(fd, &entete);
unsigned char *res2 = loadBitmapDatas(fd2, &entete);

int i = 0;
char b;
char b2;


b = res[i];
b2 = res2[i];

while (b != EOF) { /*on souhaite afficher les bits qui diffèrent entre les 2 fichiers afin de reconstituer le message*/
/* if (b != b2)
printf ("%c", b);
i++;
b = res[i];
b2 = res2[i];
}
}

*/






int main (void) {


/* FILE *fd = fopen ("3rdMay1808.bmp", "r");
if (fd==NULL){
printf("erreur") ;
return -1 ;
}

BMP_HEADER ent;

loadBitmapHeader (fd, &ent);
if (isBitmapHeaderCorrect (&ent) == 1)
printf ("l'entete est correcte\n\n");
else
printf ("l'entete est incorrecte\n\n");

printf ("Les 2 premiers octets sont: %c %c\n", ent.identifier[0], ent.identifier[1]);
printf ("La taille du fichier est: %d\n", ent.filesize);
printf ("Champs réservés: %d\n", ent.reserved);
printf ("Nb octets séparant le début du fichier des données de l'image: %d\n", ent.dataoffset);
printf ("Largeur en pixels: %d\n", ent.width);
printf ("Largeur en pixels: %d\n", ent.height);
printf ("Nb de bits pour représenter un pixel: %d\n", ent.bitsperpixels);
printf ("Type de compression: %d\n", ent.compression);
printf ("Taille en octets des données de l'image: %d\n", ent.bitmapdatasize);

fclose (fd);*/

hideMessage ("3rdMay1808.bmp", "essai.bmp", "tony et remy sont fort en c"); /* on dissimule le message, mais en l'état engendre une segmentation fault */
/* retrieveMessage ("essai.bmp", "3rdMay1808.bmp");*/

return 0;
}





Cette discussion est classée dans : fichier, int, header, return, res


Répondre à ce message

Sujets en rapport avec ce message

écriture d'un bmp [ par khayyam ] salut, j'essaie d'écrire des fichiers bmp mais j'ai quelques soucis#define CTOI(C) (*(int*)&C) #define largeur 100#define hauteur 100int main(int ar Probleme non compris en chargant un fichier !!! [ par SnOOpss ] Bonjour tout le monde, voila mon probleme :int loadtablo(){static int i = 1;char caractere;FILE *fichier; // Déclare le fichierfichier = fopen("tablea passage de MSDOS à win32 Application: problème de CAST! [ par malik7934 ] Hello,en un mot : H-E-L-P-!-!-!J'ai un problème qui m'énerve depuis deux jours...Si j'exécute le programme suivant dans VC++:#include "mycrypt.h"#prag aidez moi c pour lire ds un fichier question bateau... [ par roomsmush ] pkoi ce code ne marche pas j'ai beau me casser la tete sur mon ecran rien y fait : sachant que c:\fcach est rampli par la chaîne suivante : "c:\fichie Initialisation tableau dans un Header ? [ par Capa6T ] Salut,J'ai fait un programme en C qui doit me générer un fichier header (genre test.h) que je pourrais insérer dans un autre projet en C.Ce Header doi Nombre d'entier d'un fichier composé de chiffres [ par ValToutCourt ] Bonjour à tous, j'ai un probléme en programmation, je dois recupérer le nombre d'entier stoké dans un fichier, ca parait bidon, mais j'ai deja tout es AIDEZ MOI scp problème de texture bmp avec glaux [ par progundeath ] aidez moi svp g un big problème que j'arrive pas à résoudre mais bon je ne suis qu'un newbie d'autres le résoluront en 10 secondes enfin j'espère donc Ecriture dans un fichier [ par sebleboss2002 ] Salut tout le monde !Ce coup-ci, j'ai un problème dans l'enregistrement de type integer dans un fichier texte. Voici mon code :#include <iostream.h&g que des boucles. [ par pratix ] Salut à tous.Je post mon prg cherchenbr modifié (voir sujet précédent ''int main" ).Programme compilé avec visual C++ 06. ( zéro erreur )j'ai essay cosinus [ par anek971 ] Bonjour ,ben avt de demander de l'aide j'ai chercher sur le forum mais ya pas le programme en c.Et en faite c juste pr une verification car mon progra


Nos sponsors


Sondage...

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,655 sec (3)

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