Bonjour,
Je voulais chiffrer et déchiffrer une image, j'ai trouvé ce code dans le tutorial manipulation de fichier, mais le fichier de destination qui est pour moi l'image cryptée (extension .png) ne s'ouvre pas paint ou autre ne reconnait pas le format, y a t il une solution pour afficher l'image cryptée correctement?
voiçi le code:
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
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
#include <string.h>
char * saisir_chaine(char * lpBuffer, int buf_size);
unsigned char f1(unsigned char c);
unsigned char f1_inv(unsigned char c);
int main()
{
char choix[2];
printf("Tapez 1 pour chiffrer et 2 pour dechiffrer ");
saisir_chaine(choix, sizeof(choix));
if (*choix != '1' && *choix != '2')
fprintf(stderr, "Cette valeur est invalide.\n");
else
{
char src[FILENAME_MAX];
FILE * fsrc;
printf("Entrez le nom du fichier a %s : ", *choix == '1' ? "chiffrer" : "dechiffrer");
saisir_chaine(src, sizeof(src));
fsrc = fopen(src, "rb");
if (fsrc == NULL)
perror(src);
else
{
char dest[FILENAME_MAX];
FILE * fdest;
printf("Entrez le nom du fichier de destination : ");
saisir_chaine(dest, sizeof(dest));
if (strcmp(src, dest) == 0)
printf("La source ne peut pas etre en meme temps la destination.\n");
else
{
fdest = fopen(dest, "wb");
if (fdest == NULL)
perror(dest);
else
{
/* Notre technique : chiffrement/dechiffrement octet par octet */
int c;
unsigned char (*f)(unsigned char) = *choix == '1' ? f1 : f1_inv;
printf("Traitement en cours ...");
fflush(stdout);
while ((c = getc(fsrc)) != EOF)
putc(f(c), fdest);
fclose(fdest);
printf("\nTermine.\n");
}
}
fclose(fsrc);
}
}
return 0;
}
char * saisir_chaine(char * lpBuffer, int buf_size)
{
char * ret = fgets(lpBuffer, buf_size, stdin);
if (ret != NULL)
{
char * p = strchr(lpBuffer, '\n');
if (p != NULL)
*p = '\0';
else
{
int c;
do
c = getchar();
while (c != EOF && c != '\n');
}
}
return ret;
}
unsigned char f1(unsigned char c) /* Notre fonction de chiffrement */
{
/* Principe : on fait decaler de maniere circulaire tous les bits de un pas vers la gauche */
unsigned char msb = (c & 0x80) >> 7; /* Le bit le plus a gauche */
c <<= 1;
c |= msb;
return c;
}
unsigned char f1_inv(unsigned char c) /* Notre fonction de dechiffrement */
{
unsigned char lsb = c & 1; /* Le bit le plus a droite */
c >>= 1;
c |= (lsb << 7);
return c;
}