Salve a tutti, sono nuovo nel forum ma programmo da parecchi anni. Dunque, ultimamente mi sono dedicato molto alla programmazione PHP, scoprendo la passione per i CMS.
Ieri mi é girato di scrivere un programmino in c++ console che codificasse un file secondo l'algoritmo ONE TIME PAD (algoritmo assolutamente sicuro al 100%, unico svantaggio la chiave deve essere lunga tanto quanto lo é il messaggio da criptare).
Posto il sorgente:
Però ho un problema, grosso, appena cerco di decriptare il file che ho appena criptato il contenuto del file decifrato é vuoto... 0Kb, ho provato pure a inserire ios::binary durante l'open ma nulla di nuovo.... Insomma la criptazione funziona, o meglio il file criptato si riempie di simboli strani (come è giusto che sia), ma non capisco perché mentro lo decifro.... il file che mi si crea é totalmente vuoto. Ho steso il sorgene in modo che sia abbastanza comprensibile anche se ho dimenticato i commenti. Uso il compilatore Dev C++, ho provato quello della microsoft (visual c++ 2008) ma non mi ci trovo per nulla. Qualcuno sa dirmi dove sta l'errore? Graziecodice:#include <iostream.h> #include <stdlib.h> #include <string.h> #include <fstream.h> using namespace std; int choose; char path_file_to_encode[100]; char path_file_to_decode[100]; char path_file_key[100]; fstream file_to_encode; fstream file_to_decode; ifstream file_key; void encode(); void decode(); int main(int argc, char *argv[]) { while(1) { cout << "One Time Pad Encoder Decoder v 0.1\n"; cout << "1. Encode\n"; cout << "2. Decode\n"; cout << "3. Exit\n"; cout << "Choose: "; cin >> choose; if(choose==1) { encode(); } else if(choose==2) { decode(); } else break; } return EXIT_SUCCESS; } void encode() { char byte0, byte1; cout << "File to encode: "; cin >> path_file_to_encode; cout << "File key: "; cin >> path_file_key; cout << "File encoded: "; cin >> path_file_to_decode; file_to_encode.open(path_file_to_encode, ios::in ); file_key.open(path_file_key, ios::in ); file_to_decode.open(path_file_to_decode, ios::out ); while (file_to_encode.get(byte0)) { file_key.get(byte1); byte0 += byte1; file_to_decode.put(byte0); } file_to_encode.close(); file_key.close(); file_to_decode.close(); cout << "File encoded correctly!\n"; } void decode() { char byte0, byte1; cout << "File to decode: "; cin >> path_file_to_decode; cout << "File key: "; cin >> path_file_key; cout << "File decoded: "; cin >> path_file_to_encode; file_to_encode.open(path_file_to_encode, ios::out ); file_key.open(path_file_key, ios::in ); file_to_decode.open(path_file_to_decode, ios::in ); while (file_to_decode.get(byte0)) { file_key.get(byte1); byte0 -= byte1; file_to_encode.put(byte0); } file_to_encode.close(); file_key.close(); file_to_decode.close(); cout << "File decoded correctly!\n"; }![]()

Rispondi quotando