WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Simulationen (http://www.wcm.at/forum/forumdisplay.php?f=27)
-   -   Frage an Programmierer (http://www.wcm.at/forum/showthread.php?t=105201)

Atze 11.08.2003 18:39

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.

HJOrtmann 11.08.2003 20:24

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

Atze 12.08.2003 11:59

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.

HansHartmann 12.08.2003 12:16

"es läuft einfach nicht richtig" ist schon eine sehr hilfreiche Fehlerbeschreibung...

HJOrtmann 12.08.2003 13:58

Zitat:

Vielen Dank. Leider bin ich zu dumm dafür.
öhm - na ja, was soll man da sagen - irgendwo mußt du ja den Code herhaben ?

Wenn du im Entschlüssler "lchar = in[i]" ersetzt durch "lchar = out[i]", dann hast du eine Chance, weiter zu kommen...

Hans-Jürgen

Atze 12.08.2003 14:00

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???

Atze 12.08.2003 14:09

oh, oh... Bild vergessen.

Cokol 12.08.2003 15:41

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

HJOrtmann 12.08.2003 16:03

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

Atze 12.08.2003 16:05

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag