cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 2009
-
12 mars 2004 à 22:51
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 2009
-
14 mars 2004 à 20:48
Bonjour a tous,
voici deux fonctions:
#include <stdio.h>
#include <stdlib.h>
// Variables
char SourceFile[1024];
char DestinationFile[1024];
int choice;
// fonction extraction de fichier
int extract(char Source[1024], char Destination[1024])
{
// variable
int c, c_source, flag=1, count=0, count_end=0;
FILE *fp_destination;
FILE *fp_source;
char *begin = "-----FU-FILE-----"; // 15
char *end = "-----FU-FILE-END-----"; // 19
char *tmp;
tmp = malloc(20);
// ouverture des fichier if((fp_destination fopen(Destination, "wb")) NULL)
{
return 0;
}
if((fp_source fopen(Source, "rb")) NULL)
{
return 0;
}
// ici on va extraire le fichier caché
while((c = fgetc(fp_source)) != EOF)
{ if(count 15 || count 16)
{
if (count != 15)
{
fputc(c, fp_destination);
}
else
{
count++;
}
}
else
{
if(count <= 15)
{
if(c == begin[count])
{
flag = 0;
count++;
}
else
{
flag = 0;
count = 1;
}
}
}
}
// on ferme les fichiers
fclose(fp_destination);
fclose(fp_source);
// et libere la memoire
free(tmp);
return 1;
}
// fonction de l'integration du fichier
int integration(char Source[1024], char Destination[1024])
{
// variables
int c, c_source;
FILE *fp_destination;
FILE *fp_source;
// ouverture des fichiers if((fp_destination fopen(Destination, "a+b")) NULL)
{
return 0;
}
if((fp_source fopen(Source, "rb")) NULL)
{
return 0;
}
// on atteint la fin du fichier
while((c = fgetc(fp_destination)) != EOF)
{
}
// une fois la fin atteint on copie le fichier dans l'autrz
if(feof(fp_destination))
{
fputs("----FU-FILE----", fp_destination);
while((c_source = fgetc(fp_source)) != EOF)
{
fputc(c_source, fp_destination);
}
if(!(feof(fp_source)))
{
return 0;
}
//fputs("----FU-FILE-END----", fp_destination);
}
else
{
return 0;
}
// on ferme les fichiers
fclose(fp_destination);
fclose(fp_source);
return 1;
}
// fonction principale du programme
int main(int argc, char *argv[])
{
int result;
// menu
printf("-------------------\n");
printf("Cyber Stegano v1.0 \n");
printf("-------------------\n");
printf("\n\n1 : Integrer un fichier dans un autre.\n");
printf("2 : Extraire un fichier dans un nouveau.\n");
printf("Votre choix : ");
scanf("%i", &choice);
// ici on va integrer un fichier dans un autre
if(choice == 1)
{
printf("\n\nFichier a integrer : ");
scanf("%s", &SourceFile);
printf("\nFichier "recevant" : ");
scanf("%s", &DestinationFile);
printf("\n\nEn cours...");
result = integration(SourceFile, DestinationFile);
if(result == 0)
{
printf("Error !\n\n");
system("PAUSE");
exit(0);
}
printf("\n\nOperation is finish !\n\n");
}
// ici on va extraire un fichier
else if (choice == 2)
{
printf("\n\nFichier contenant le fichier a extraire : ");
scanf("%s", &SourceFile);
printf("\nNom du fichier a extraire : ");
scanf("%s", &DestinationFile);
printf("\n\nEn cours...");
result = extract(SourceFile, DestinationFile);
if(result == 0)
{
printf("Error !\n\n");
exit(0);
}
printf("\n\nOperation is finish !\n\n");
}
else // si aucun choix valide
{
printf("Error !\n\n");
system("PAUSE");
}
system("PAUSE");
return 0;
}
la fonction 'intergration', copie un fichier dans un autre (genre de steganographie)... jusque la tout va bien... la fonction 'extract', quand a elle, enleve le fichier contenue dans l'autre fichier (je c, c pas tres clair !!!), mais seulement, le fichier n'est pas identique...il y a des 'trucs' en plus... je n'arrive pas a trouver l'erreur dans le code, quelqu'un peut m'aider ?
Bob...
"La chance accorde ses faveur aux esprits avertis..."
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 mars 2004 à 23:47
Salut LordBob,
le prends pas mal mais ce code ressemble a du VB retranscrit, sera aussi lent. On ne lit ni n'ecrit dans un fichier octet par octet, imagine sur un gros fichier c'est impensable. On ne cherche pas la fin (eof) mais on s'y positionne direct.
Si tu vises win32, va voir dans mes sources comment on procede.
Autre truc, ne fais pas tourner le memory manager pour 20 octets (malloc), prends les sur la pile directement (char buf[20]), tu economiseras des centaines de cycles processeurs.
cs_LordBob
Messages postés2865Date d'inscriptionsamedi 2 novembre 2002StatutMembreDernière intervention11 mai 20099 14 mars 2004 à 20:33
bon je cherche toujours sur mon code, ce qui ne vat pas, bien que j'ai pas petite idée... mais je n'arrive pas à corriger mon erreur... tu pourrais pas m'aider, car ca doit etre simple pour toi !!!
Bob...
"La chance accorde ses faveur aux esprits avertis..."
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 14 mars 2004 à 20:38
Je ne fais que du win32:
CreateFile
ReadFile
WriteFile
SetFilePointer
SetEndOfFile
CloseHandle
Voila ce dont je me sers, rien que du direct au systeme.
ciao...
BruNews, Admin CS, MVP Visual C++
Vous n’avez pas trouvé la réponse que vous recherchez ?