Salut tout le monde,
j ai repioche un vieux fichier a moi qui fait ca :
main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void xor_file (FILE* source, FILE* destination, char* clef)
{
long taille, i;
int h, c;
i = 0;
taille = strlen (clef);
h = fgetc (source);
while (!feof (source))
{
c = h ^ clef [i];
fputc (c, destination);
i++;
if (i == taille) {
i = 0;
}
h = fgetc (source);
}
}
void error (FILE* file, char* filename) {
if (!file) {
fprintf (stderr, "Impossible d'ouvrir le fichier %s\n", filename);
}
}
int xor (char* src, char* dest, char* clef)
{
FILE * source, *destination;
if ( ( (source = fopen (src, "rb")) != NULL) &&
( (destination = fopen (dest, "wb")) != NULL))
{
xor_file (source, destination, clef);
fclose (source);
fclose (destination);
return 1;
}
error (source, src);
error (destination, dest);
return 0;
}
void usage (char* cmd)
{
fprintf (stderr, "Usage : %s src dest clef\n", cmd);
exit (EXIT_FAILURE);
}
int main (int argc, char* argv[])
{
long e = LONG_MAX;
if (argc < 4)
{
usage (argv[0]);
}
xor (argv[1], argv[2], argv[3]);
return EXIT_SUCCESS;
}
Utilisation :
tu compiles comme tu le sens, gcc main.c au plus simple : on aura un a.out (a.exe pour sous win)
et la, sous console : on crypte fichier1 en fichier 2 avec la clef "letsgo"
a.out fichier1.txt fichier2.txt letsgo
on decrytpe le fichier2.txt dans fichierDecrypte.txt avec la meme clef par la commande :
a.out fichier2.txt fichierDecrypte.txt letsgo
Et si tout va bien (et y a de raisons qu il y en aille autrment), fichier1.txt et fichierDecrypte.txt sont identiques ^^
Voilou
