![]() |
Frage an Programmierer
Hallo Programmierer. Jaja, ich weiss, wird sicherlich nicht ganz so hier her gehören aber ich würde doch gerne mal um Hilfe fragen, da ich in vielen anderen Foren nur die Antwort bekommen habe "Wer ein verschlüsselungsprogramm schreibt, der muss auch ein
Entschlüsselungsprogramm selber schreiben können." Naja, wie die Aussage schon sagt, ich habe ein grosses Problem mit meinem Entschlüsselungsprogramm. Es läuft einfach nicht richtig. Verschlüssler: #include <iostream> #include <cstdlib> #include <fstream> using namespace std; char* cencrypt(char* in, char key='5') { char lchar = 0; int length = strlen(in); char* out = new char[length+1]; for(int i=0;i<length;i++) { out[i] = in[i] + key + (lchar % key); lchar = in[i]; } out[length] = 0; return out; } int main() { char eingabe[255] = {0}; int i = 0,x = 0,schluessel = 0; div_t weiter; cout<<"Codierung"<<endl; cout<<"Bitte Ihren Text (max. 255 Zeichen) :"; cin.getline(eingabe,255); cout << "\n Der verschluesselte Text lautet : \n\n"; char *enc = cencrypt(eingabe); cout << enc << endl; ofstream ofs ("converted.txt"); ofs << enc <<endl; delete [] enc; } Entschlüssler: #include <iostream> #include <cstdlib> #include <fstream> using namespace std; char* cencrypt(char* in, char key='5') { char lchar = 0; int length = strlen(in); char* out = new char[length-1]; for(int i=0;i<length;i++) { out[i] = in[i] - key - (lchar % key); //Überall,wo ein + stand, steht jetzt ein Minus, um den Code imzurechnen. lchar = in[i]; } out[length] = 0; return out; } int main() { char eingabe[255] = {0}; int i = 0,x = 0,schluessel = 0; div_t weiter; ifstream in ("converted.txt"); cout << "\n Der verschluesselte Text lautet : \n\n"; in.getline(eingabe,255); char *enc = cencrypt(eingabe); cout << enc << endl; delete [] enc; while ('a'); } Bitte helft mir, sitze da nämlich schon ewig dranne. BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE, BITTE. |
genialer Algo ;)
ich habe wirklich keine Lust, Fehler zu suchen, aber einer ist auffällig: in deinem Decoder setzt du deinen 'key' auf den INPUT (== gecrypteten) String, während du beim Encoden den Key auf den INPUT ( == UNgecrypteten !) String setzt - dat kann so nicht jehn... HansJürgen |
Hallo.
Vielen Dank. Leider bin ich zu dumm dafür. Ich hoffe, das mir dabei noch mal jemand helfen kann. Vielen Dank im Vorraus. mfg Atze. |
"es läuft einfach nicht richtig" ist schon eine sehr hilfreiche Fehlerbeschreibung...
|
Zitat:
Wenn du im Entschlüssler "lchar = in[i]" ersetzt durch "lchar = out[i]", dann hast du eine Chance, weiter zu kommen... Hans-Jürgen |
Hallo.
Ich habe es jetzt so gemacht, aber leider kommt jetzt ein Debug-Error, der im angehängten Bild zu sehen ist. Was habe ich falsch gemacht??? Vielen Dank im Vorraus. mfg Atze. Achja, die angehängte Fehlermeldung ist natürlich sehr aufschlussreich, findet ihr nicht??? |
oh, oh... Bild vergessen.
|
Die Fehlermeldung ist doch eindeutig, oder? ;)
Sie bedeutet einfach nur, dass du auf Speicherbereiche zugreifst, die vorher nicht reserviert wurden. Du erstellst einen nullterminierten string der Länge (length -1): char* out = new char[length-1]; und greifst aber mit: out[length] = 0; auf das das Element length zu. Ändere die Zeile: char* out = new char[length-1]; wie folgt: char* out = new char[length+1]; dann sollte das Programm arbeiten, vorausgesetzt, du hast Hans-Jürgen's Hinweis befolgt und "lchar = in[i]" durch "lchar = out[i]" ersetzt. Steffen |
er könnte übrigens auch im Decoder "lchar = in[i]" durch "lchar = out[i]" ersetzen, oder ? :p
Zusatzfrage: wird's dadurch sicherer ? :D Lerneffekt: mal sehen, ob's dann genau so funktioniert :rolleyes: HansJürgen |
Hallo.
Es hat alles prima geklappt. Weiss villeicht jemand, wie ich das mache, dass der Entschlüsseler auch Zeilenumbrüche einliest??? Danke für eure Antworten. mfg Atze |
@Hans-Jürgen
Du hast recht, auch das Ersetzen im Decoder (wie von dir beschrieben) müsste funktionieren. Vezüglich der "Sicherheit" wird sich das nichts nehmen - ich bin überzeugt davon, dass Kryptologen diesen Code in Minuten (wenn nicht noch schneller) geknackt haben. Schliesslich ist das ja auch nur ein 8Bit Code - aber für den Privatgebrauch wahrscheinlich ausreichend :) . @Atze Probiers mal damit: in.getline(eingabe,255,'\0'); Gruss, Steffen |
Alle Zeitangaben in WEZ +2. Es ist jetzt 02:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag