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:
codice:
#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";
}
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? Grazie