Bonjour,
je suis entrain de réaliser un projet informatique pour mon dut geii qui porte sur la cryptographie. Le but de ce projet est d'insérer dans une image au format .BMP un message caché grâce à la transparence des couleurs.
la première partie du projet consiste à déterminer si l'image est bien au format .BMP . voici comment se présente ma fonction d'analyse :
Fichier Header tete.h :
Fonction Main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 //définition des types de base. typedef unsigned char byte; typedef unsigned short int word; typedef unsigned long int dword; //structure de l'entete fichier. typedef struct tete_f { byte signature[2]; dword taille; dword inconnu; dword offset; }tete_f;
Voici la fonction LitHeader appelé par main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "tete.h" //initialisation des fonctions du programme. int LitHeader(FILE *out); int main(int argc, char *argv[]) { FILE *out; out=fopen("picto.bmp","rb"); if (LitHeader(&*out)==1){ ... } else { printf("L'image choisit n'est pas valide.\n"); system("PAUSE"); return 0; } fclose(out); system("PAUSE"); return 0; }
Son rôle est de déterminer si les deux premiers octets contenus dans le fichier "Picto.bmp" sont bien 'B' et 'M', si c'est le cas, la fonction renvoie '1' à la fonction main. Sinon la fonction renvoie '0'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 int LitHeader(FILE *out) { tete_f BMP_Header; fread(BMP_Header.signature,2,1,out); printf ("signature de fichier 1. : (%c) [%c]\n",BMP_Header.signature[0],BMP_Header.signature[1]); if (fread(&BMP_Header.signature[0],2,1,out)=='B'&& fread(&BMP_Header.signature[1],2,1,out)=='M'){ printf("je passe par le valide\n"); return 1; } else{ printf ("signature de fichier 2. : (%c) [%c]\n",BMP_Header.signature[0],BMP_Header.signature[1]); printf("je passe par le non valide\n"); return 0; } }
J'ai mis en évidence mon problème en programmant deux fonctions "printf", une située en début de fonction, numérotée "1." , la seconde, située après la condition du "if", dans "else", numérotée "2.".
Le programme détermine bien les lettres "B" et "M" au niveau des deux premiers octets lors de la première vérification (numérotée 1.), mais l'image n'est pas validée comme étant de format .bmp et passe alors par "else" avec pour nouvelles valeurs de signature "ê" et "N".
Je n'ai fait que lire le fichier .bmp et poser des conditions. pourquoi les valeurs sont-elles modifiées ?
Partager