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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
void CryptageFichiersOuverts(FILE *pfIn, FILE *pfOut, int* clef)
{
int carac;
clef = malloc (8 * sizeof(int));
while((carac = fgetc(pfIn)) != EOF)
{
int i;
for (i=0;i<8;i++)
{
int xored = carac ^ clef[i];
fputc(xored, pfOut);
}
}
}
void Cryptage(const char *nomFichSrc, const char *nomFichDest, int* clef)
{
FILE *pfIn;
pfIn = fopen(nomFichSrc, "r");
if(pfIn == NULL)
{
puts("Echec d'ouverture du fichier source.");
}
else
{
FILE *pfOut =NULL;
pfOut = fopen(nomFichDest, "w");
if(pfOut == NULL)
{
puts("Echec d'ouverture du fichier destination.");
}
else
{
CryptageFichiersOuverts(pfIn, pfOut, clef);
fclose(pfOut);
}
fclose(pfIn);
}
}
void DemandeEtCrypte()
{
char nomFich[300] = "";
char *pRetour = NULL;
int clef [8];
printf("Nom du fichier a crypter : \n");
fflush(stdout); // Nécessaire si une ligne ne se termine pas par \n - fflush(stdout) : fonction qui vide le tampon de sortie.
/* On lit le nom du fichier,
puis on vérifie qu'il rentre en entier dans la zone de 300 caractères.
S'il rentre, le \n sera dedans, et il faudra le supprimer.
Si ça ne rentre pas, le \n ne sera pas dedans, et on dira Erreur. */
fgets (nomFich, 300, stdin);
pRetour = strchr(nomFich, '\n');
if(pRetour == NULL)
{
// Le \n final n'est pas dans le nom de fichier.
puts("Nom de fichier trop grand.\n");
}
else
{
// Le \n est présent : OK, on tronque la chaîne ici.
*pRetour = '\0';
FILE *pfclef;
pfclef = fopen("clef.txt", "r");
if (pfclef != NULL)
{
/*int j;
for (j=0;j<8;j++)
{
scanf ("%d", &clef[j]);
}*/
fscanf (pfclef, "%s" , clef);
fclose (pfclef);
}
else
{
printf ("Erreur d'ouverture du fichier\n");
}
// On lit la clef.
/* On lance le cryptage du fichier, et on met le résultat dans "fichier_crypte.txt".
Si on veut, on peut demander le nom du fichier destination à la place... */
Cryptage(nomFich, "crypte.txt", clef);
printf ("fichier crypte\n");
}
}
int main(int argc, char *argv[]) {
DemandeEtCrypte();
return 0;
} |
Partager