Bonjour à tous,
J'essaie de chiffrer un fichier à l'aide d'une clé et de l'opération xor sur tout le fichier. Bien entendu la clé est plus petite que le fichier à chiffrer du coup la clé est parcourue en boucle.
Cependant j'ai un petit problème au niveau du déchiffrage, le programme se lance mais quitte directement sans rien faire. On dirait qu'il plante et il y a une erreur mémoire (instruction xxx ... impossible de read)
J'ai peut-être commis une erreur dans le chiffrage puisque je suis totalement novice en chiffrage et en C++ en plus. D'après ce que j'ai compris je peux utiliser la même opération que le chiffrage, au niveau du xor, pour déchiffrer, est-ce exacte ?
Sinon voici mon code :
Ce serait pour après mais peut-être aussi pouvez-vous m'aider pour que la clé key soit interpretée comme du hex car pour le moment c'est du char.
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 #include <cstdlib> #include <iostream> #include <fstream> using namespace std; void crypt(const char *text, const char *key, char *crypted) { unsigned int j = 0; for (unsigned int i = 0; i<strlen(text); i++) { if (j >= strlen(key)) { j=0; } crypted[i] = text[i]^key[j]; j++; } } int main(int argc, char *argv[]) { char *key = "9cdfb439c7876e703e307864c9167a15"; fstream file_in("text.txt", ios::in|ios::binary); fstream file_out("text-out.txt", ios::out|ios::binary); int iter = 0; const int tranche = 192; char buffer[tranche]; while (!file_in.eof()) { file_in.getline(buffer, (iter*tranche)+tranche); char tmp[tranche]; crypt(buffer, key, tmp); strcpy(buffer, tmp); file_out.write(buffer, strlen(buffer)); iter++; } file_in.close(); file_out.close(); cout << "\nFini\n"; system("PAUSE"); return 0; }
J'ai sûrement fait des erreurs bêtes et coder comme un pied mais j'espère que vous saurez me mettre sur le bon chemin !
Merci d'avance.
Partager