Hallo Leute,
ich habe ein Problem bei einer Aufgabe (FH) - die ich einfach nicht verstehe.
Das ganze Programm ist schon fertig und läuft, nur bei einem Punkt geht etwas falsch und ich kann es nicht nachvollziehen und würde um eure Hilfe bitten, an was es liegen könnte.
Es muss ein symmetrisches Verschlüssungsprogramm geschrieben werden - das zu verschlüsselnde Wort muss aus einem File eingelesen werden, das Schlüsselwort muss per String über die Konsole eingeben werden, die Ausgabe erfolgt wieder ein File.
Für das entschlüsseln des Textes gilt derselbe Weg.
Jetzt ist aber mein Problem (beim entschlüsseln), dass beim Einlesen des Textes, ein anderer Text reinkommt, als in der File steht.
Mein Insert Text war 4 Buchstaben lang, der Text, der eingelesen wird, ist aber plötzlich 7 Buchstaben lang (das Programm greift auf die richtige Datei zu). Natürlich greift dann die Entschlüsselung nicht mehr richtig (es werden in einer for schleife einfach die Buchstaben "zusammengezählt" bzw. beim entschlüsseln von dem Wort das Schlüsselwort wieder weggerechnet.
Damit es läuft - muss vorher noch ein text.txt erstellt werden mit einem Wunschwort und nach dem verschlüsseln - muss halt dieses in die text.txt kopiert werden - dass das dann wieder entschlüsselt wird.
Liegt es an der Art, wie ich das einlese?
Würde mich sehr freuen, wenn jemand einen Tipp hat - wie gesagt - das ganze Programm ist soweit fertig - nur das Problem zwischen tatsächlichem Text in der File zu dem - was eingelesen wird, versteh ich einfach nicht..
LG Andreas
ich habe ein Problem bei einer Aufgabe (FH) - die ich einfach nicht verstehe.
Das ganze Programm ist schon fertig und läuft, nur bei einem Punkt geht etwas falsch und ich kann es nicht nachvollziehen und würde um eure Hilfe bitten, an was es liegen könnte.
Es muss ein symmetrisches Verschlüssungsprogramm geschrieben werden - das zu verschlüsselnde Wort muss aus einem File eingelesen werden, das Schlüsselwort muss per String über die Konsole eingeben werden, die Ausgabe erfolgt wieder ein File.
Für das entschlüsseln des Textes gilt derselbe Weg.
Jetzt ist aber mein Problem (beim entschlüsseln), dass beim Einlesen des Textes, ein anderer Text reinkommt, als in der File steht.
Mein Insert Text war 4 Buchstaben lang, der Text, der eingelesen wird, ist aber plötzlich 7 Buchstaben lang (das Programm greift auf die richtige Datei zu). Natürlich greift dann die Entschlüsselung nicht mehr richtig (es werden in einer for schleife einfach die Buchstaben "zusammengezählt" bzw. beim entschlüsseln von dem Wort das Schlüsselwort wieder weggerechnet.
Damit es läuft - muss vorher noch ein text.txt erstellt werden mit einem Wunschwort und nach dem verschlüsseln - muss halt dieses in die text.txt kopiert werden - dass das dann wieder entschlüsselt wird.
Liegt es an der Art, wie ich das einlese?
Würde mich sehr freuen, wenn jemand einen Tipp hat - wie gesagt - das ganze Programm ist soweit fertig - nur das Problem zwischen tatsächlichem Text in der File zu dem - was eingelesen wird, versteh ich einfach nicht..
LG Andreas
Code:
#include <iostream>
#include <string>
#include <fstream>
#include <istream>
using std::cout;
using std::cin;
using std::string;
using std::ifstream;
using std::ostream;
bool read_text(string const& text, string& insert);
string encrypt(string& insert, string& key, int& mode, string& output);
string decrypt(string& insert, string& key, int& mode, string& output);
void print(string& output, int& mode);
void main() {
string insert = "";
string output = "";
string key = "";
int mode = 0;
read_text("text.txt", insert);
cout << "Please give me Keyword: ";
cin >> key;
cout << "\nMode (Press 1 for encrypt - Press 2 for decrypt): ";
cin >> mode;
if (mode == 1) {
encrypt(insert, key, mode, output);
}
if (mode == 2) {
decrypt(insert, key, mode, output);
}
print(output, mode);
}
string encrypt(string & insert, string & key, int& mode, string& output) {
if (mode == 1) {
int k = 0;
for (int i = 0;i < insert.size(); ++i) {
if (k == key.size()) {
k = 0;
}
output += insert[i] + key[k];
k = ++k;
}
return output;
}
}
string decrypt(string & insert, string & key, int& mode, string& output) {
if (mode == 2) {
int k = 0;
for (int i = 0;i < insert.size(); ++i) {
if (k == key.size()) {
k = 0;
}
output += insert[i] - key[k];
k = ++k;
}
return output;
}
}
bool read_text(string const& text, string& insert) {
ifstream ifs(text);
insert.clear();
if (ifs.good()) {
string text;
ifs >> text;
insert = text;
}
else {
return false;
}
ifs.close();
return true;
}
void print(string& ouput, int& mode) {
if (mode == 1) {
std::ofstream ofs("encrypt.txt");
ofs << ouput;
ofs.close();
}
if (mode == 2) {
std::ofstream ofs("decrypt.txt");
ofs << ouput;
ofs.close();
}
if (mode <= 0 || mode > 2) {
cout << "\nWrong mode - no printing possible!\n";
}
}