komme mal wieder nicht bei einer Änderung in C++ weiter....
Ich habe ein Programm, dass 2 Parameter erwartet. Der erste Parameter ist der einzulesende File und der zweite Parameter ist der auszugebende File. Der erste File wird durch Eingabe eines Schlüssels xor-Verknüpft und im zweiten File gespeichert. Um den zweiten File wieder zu entschlüsseln, muss man diesen als ersten Parameter angeben und wieder den gleichen Schlüssel eingeben.
Habe bisher folgenden Code erstellt:
Code: Alles auswählen
// xor.h
#ifndef _XOR_H_
#define _XOR_H_
#include <iostream>
#include <string>
using namespace std;
class Daten {
public:
Daten();
~Daten();
// Zeichenweise kopieren
void copyChar4Char( ifstream& istream, ofstream& ostream, string s);
private:
char* istream;
char* ostream;
string schluessel;
};
#endif
Code: Alles auswählen
// xor.cpp
#include <iostream>
#include <fstream>
#include <string>
#include "xor.h"
using namespace std;
Daten::Daten() {
cout << "Konstruktor" << endl;
}
Daten::~Daten() {
cout << "Destruktor" << endl;
}
// Zeichenweise kopieren
void Daten::copyChar4Char( ifstream& istream, ofstream& ostream, string schluessel) {
char ch;
int i=0; // Zaehler fuer den Schluessel
cout <<"Bitte Schluessel eingeben: " ; getline(cin,schluessel);
int schluessellaenge=schluessel.size(); // best. die Anzahl der Zeichen von schluessel
cout << schluessel << endl;
while(istream.get(ch)) {
if(istream.fail()) {
cout << "Unerwarteter Lesefehler!" << endl;
break;
}
//ostream.put(ch);
ostream.put(ch ^ schluessel[i]);
if(ostream.fail()) {
cout << "Unerwarteter Lesefehler!" << endl;
break;
}
i++;
if(i>=schluessellaenge)
i=0;
}
cout << endl;
}
Code: Alles auswählen
// main_xor.cpp
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include "xor.h"
using namespace std;
int main(int argc, char** argv) {
if ((1==argc) || (argc<3)) {
cerr << "Usage: " << argv[0] << " <InputFile> <OutputFile>" << endl;
exit(1);
}
if (3==argc) {
ifstream f1(argv[1], ios::out|ios::binary|ios::in);
ofstream f2(argv[2]);
if( f1.is_open() != true ) {
cerr << "Konnte Datei " << argv[1] << " nicht öffnen!" << endl;
return 1;
}
if( f2.is_open() != true ) {
cerr << "Konnte Datei " << argv[2] << " nicht öffnen!" << endl;
return 1;
}
// Zeichenweise einlesen und verschluessel wieder ausgeben
string s;
Daten daten;
daten.copyChar4Char(f1,f2,s);
f1.close();
f2.close();
}
return 0;
}
Code: Alles auswählen
daniel@daniel-laptop:~/scripts/C++/Projekte/xor$ ./main_xor
Usage: ./main_xor <InputFile> <OutputFile>
daniel@daniel-laptop:~/scripts/C++/Projekte/xor$ ./main_xor xor.cpp /tmp/verschluesselt.txt
Konstruktor
Bitte Schluessel eingeben: Duff
Duff
Destruktor
daniel@daniel-laptop:~/scripts/C++/Projekte/xor$ file /tmp/verschluesselt.txt
/tmp/verschluesselt.txt: data
daniel@daniel-laptop:~/scripts/C++/Projekte/xor$ less /tmp/verschluesselt.txt
"/tmp/verschluesselt.txt" may be a binary file. See it anyway?
daniel@daniel-laptop:~/scripts/C++/Projekte/xor$ ./main_xor /tmp/verschluesselt.txt /tmp/entschluesselt.txt
Konstruktor
Bitte Schluessel eingeben: Duff
Duff
Destruktor
daniel@daniel-laptop:~/scripts/C++/Projekte/xor$ cat /tmp/entschluesselt.txt
// xor.cpp
#include <iostream>
....
Allerdings bekomme ich es noch nicht hin, da ich nicht genau weiß, wie ich am besten vorgehe...
Danke & Gruß,
Daniel