Hallo,
Ich lerne seit einiger Zeit C++-Programmierung und bin jetzt gerade bei der Vertiefung von Operatoren stehengeblieben. Da wollte ich einen Code zur Verschlüsselung von Strings mittel XOR schreiben, doch irgendetwas scheint da falsch zu laufen:
// Verschlüsselt Daten mittels XOR
#include <iostream>
using namespace std;
class Ciphering {
char plain[65536];
char cipher[65536];
char *doCiphering(char *from, char *key) {
unsigned short int keyl = strlen(key);
for (unsigned short int i = 0; from[i]; i++) {
cipher[i] = from[i] ^ key[i % (keyl - 1)];
}
char *cipherp;
cipherp = &cipher[0];
return cipherp;
}
public:
Ciphering (char p[65536]) { strcpy_s(plain, 65536, p); }
char *encrypt(char *key) {
return doCiphering(plain, key);
}
char *decrypt(char *key) {
return doCiphering(cipher, key);
}
};
int main() {
cout << "XOR-Verschlüsselung" << "\n\n\n\n";
char txt[65536];
cout << "Geben Sie den Klartext ein: ";
gets_s(txt);
Ciphering msg1(txt);
char key[65536];
cout << "Geben Sie Schlüssel ein: ";
gets_s(key);
cout << "\n" << "Geheimtext: " << msg1.encrypt(key);
cout << "\n\n\n" << "Geben Sie Schlüssel ein: ";
gets_s(key);
cout << "\n" << "Klartext: " << msg1.decrypt(key);
gets_s(key);
return 0;
}
Die Ausgabe lautet dann z.B.:
XOR-Verschl³sselung
Geben Sie den Klartext ein: klartext
Geben Sie Schl³ssel ein: schluessel
Geheimtext: ↑☼ ▲☺
Geben Sie Schl³ssel ein: schluessel
Klartext: klart
Wieso nicht vollständig?
Und wenn ich z. B. "hallo" und danach "test" eingebe, läuft bei mir der ganze Bildschirm mit ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
voll, beim Entschlüsseln hängt er sich dann auf …
Das ist das erste Programmchen, was ich ohne Anlass aus meinem C++-Tutorialbuch geschrieben habe und für das ich daher keine Lösung habe;
kann mir jemand sagen, was ich falsch mache? :)
Vielen Dank schon mal! :-)
Mit freundlichen Grüßen,
KnorxThieus (m)