Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit decrypter

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.12.2004, 17:14 Uhr
morbid



äähm ich hab da ein problem mit einem programm das ich geschrieben hab bzw es sind 2 also das eine ist ein encrypter und das andere ein decrypter.
und zwar läuft es so das man einen text eingibt und ein passwort und der encypter ordnet dann jedem bit mehr bits zu abhängig vom pw.. naja und dann gibt der encrypter das ganze in eine text datei aus.
schön ung gut soweit jetz hab ich das problem beim decrypter das er die datei zwar liest aber
dann nicht mehr decrypter kann er kann halt nur nen eingegeben text decrypter (also die normale version das soll jetz ein update werden)

hier sind die sources:

ENCRYPTER:

C++:
#include <iostream>
#include <cls_funktion.h>                                    //mein cls header der funktionier ^^
#include <fstream>

using namespace std;


int main () {
bool quit=false;
do {


ofstream outfile;
outfile.open("Morbid-encode.txt");

    int code;
    int lang;
    char aus;

    char name [100];
    char* enc;

    cout << "\n\n################################################################################"
         << "\n################################################################################"
         << "\n\n\t\t\t   ...Encrypter by Morb!D..."
     << "\n\n________________________________________________________________________________"
         <<"\n\n\tGib ein was du encrypten willst: ";
    cin.getline (name, 100);
    clrscr();
    enc = name;
    cout <<"\n\n\tGewuenschtes Passwort eingeben: ";
    cin >>code;
    clrscr();
    lang = strlen(name);
        for (int i = 0; i < lang; i++) {
        *enc += code;
        enc++;
    }
    cout << "\n\n################################################################################"
         << "##### " << name << " ##### "
         << "\n################################################################################"
     << "\n\n________________________________________________________________________________";
    cout << "\n\n\tMoechten sie das Programm (B)eenden (N)ochmal ausführen" << endl;
    outfile << name;
    cin >> aus;
    switch (aus) {
    case 'B':
    case 'b':
        quit=true;
        break;
    case 'N':
    case 'n':
        quit=false;
        break;
    default:
        for (i=-20000; i <= 0; i++) {
            cout << i;
        }
    }
}while (!quit);
    
    return 0;
}



jo mit dem beenden und dem nochmal ausführen hab ich auch so meine probs^^

also und hier der Problem fall der decrypter:

C++:
#include <iostream>
#include <cls_funktion.h>
#include <fstream>

using namespace std;

void tausch(char &, char &);


int main (){
bool quit=false;
do {
    int code;
    char aus;
    char weiter;
    int lang;
    char name[100];
    char lese[100];
    char* enc;
    cout << "\n\n################################################################################"
         << "\n################################################################################"
         << "\n\n\t\t\t   ...Decrypter by Morb!D..."
     << "\n\n________________________________________________________________________________"
     << "\n\n\tDruecken sie eine beliebige taste um ihre codierte Datei einzulessen";
    cin >> weiter;
    ifstream infile;
    infile.open("Morbid-encode.txt");
    if (!infile) {
    cout << "\n\n\tFEHLER DATEI NICHT GEFUNDEN";
    }
    infile.getline(lese, 100);
    cout << lese;
    infile.close();
    tausch(name[100], lese[100]);    
    enc = name;
    cout <<"\n\n\tGib das Passwort ein : ";
    cin >>code;
    clrscr();
    lang = strlen(name);
        for (int i = 0; i < lang; i++) {
        enc -= code;
        enc++;
    }
    cout << "\n\n################################################################################"
         << "##### " << name << " ##### "
         << "\n################################################################################"
     << "\n\n________________________________________________________________________________";
    cout << "\n\n\tMoechten sie das Programm (B)eenden oder (N)ochmal " << endl;
    cin >> aus;
    switch (aus) {
    case 'B':
    case 'b':
        quit=true;
        break;
    case 'N':
    case 'n':
        quit=false;
        break;
    default:
        for (i=-20000; i <= 0; i++) {
            cout << i;
        }
    }
}while (!quit);
    return 0;
}


void tausch(char &a, char &b) {

char buffer;
buffer=a;
a=b;
b=buffer;

}



also ich fänds echt nett wenn mir jemand sagen könnte was mit dem decrypter nicht stimmt oder mit dem nochmal ausführen und beenden da wenn ich nochmal ausführen mach er bei mir bei der code eingabe anfängt....


Bearbeitung von morbid:

P.s. Kann mir einer sagen wo ich ein tutorial zum gui erstellen unter c++ find?




Bearbeitung von typecast:

cpp Tags sind schon ne feine Sache. Meinst du nicht auch?


Dieser Post wurde am 07.12.2004 um 18:49 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.12.2004, 18:20 Uhr
~Th
Gast


Beim Decrypter muß es wohl

C++:
*enc -= code;


heißen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.12.2004, 18:43 Uhr
morbid



hum habs probiert hilft nicht....
immernoch das selbe problem ohne den pointer kommt keine fehlermeldung aber die ausgabe ist immer das von mir eingegeben pw....
und mit dem ponter kommt was ganz komisches raus rechnet jedenfalls falsch dann...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2004, 16:13 Uhr
morbid



hallo niemand da der mir helfen kann???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.12.2004, 16:40 Uhr
~Th
Gast


Beschreib mal deinen Algorithmus, denn bei

C++:
for (int i = 0; i < lang; i++) {
        *enc += code;
        enc++;
}



ist code ja eine Zahl(int) und kein Paßwort.

Außerdem ist deine Tausch-Funktion Schrott, da du mit

C++:
tausch(name[100], lese[100]);


nur den 100. Wert beider Arrays tauschst (Speicherüberschreiber, da die Arrays nur 100 groß sind, also nur Werte v. 0 - 99 erlaubt sind).

Warum benötigst du überhaupt die Tauschfunktion? Benutz doch einfach die Eingabe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.12.2004, 19:07 Uhr
morbid



naja die ist nur testhalber drin eingentlich
und zum encrypter


C++:
for (int i = 0; i < lang; i++) {
        *enc += code;
          enc++;
}


der addiert jeweils den code zum jeweiligen standort sollte es jedefalls also das encrypten funzt und decrypter auch wenn ich was eingebe aber nicht wenn ich es auslese...
ich hab auch nen decrypter mit eingabe und der funktioniert perfekt.
der ist genau so wie der da nur mit getline funktion also bzw. eingabe....

hum die tauschfunktion mach ich mal raus bzw ist schon drausen also ich hab das mal umgeändert das heist jetz so:


C++:
infile.get(lese, 100);
    strcpy(buffer, lese);
    while (infile) {
        infile.getline(lese, 100, +1);
    strcat(buffer, lese);
    }
        cout << buffer;
    infile.close();
    name==buffer;
    enc = name;
    cout <<"\n\n\tGib das Passwort ein : ";
    cin >>code;
    clrscr();
    lang = strlen(name);
        for (int i = 0; i < lang; i++) {
        enc -= code;
        enc++;
    }



naja bei der ausgabe liefert er mir das:

►☻↕♥►☻& (usw also sonderzeichen=

obwohl ich das passwort 2 und das wort hi hab...

ich weis auch nciht weiter

Dieser Post wurde am 09.12.2004 um 19:10 Uhr von morbid editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.12.2004, 10:26 Uhr
~Th
Gast


Also du solltest mal versuchen nicht so viele Variablen zu verwenden und Funktionen verwenden, z.B.


C++:
void Encrypt(char *enc, int len, int code)
{
   for (int i = 0; i < len; i++)
   {
       *enc += code;
        enc++;
   }
}



so daß die Decrypt-Funktion natürlich analog aussehen muß (also mit *)

C++:
void Decrypt(char *enc, int len, int code)
{
   for (int i = 0; i < len; i++)
   {
       *enc -= code;
        enc++;
   }
}



Da du ja C++ benutzt, solltest du lieber den Datentyp std::string verwenden (aus <string>,
also

C++:
void Encrypt(std::string &s, int code)
{
   for (int i = 0; i < s.length(); i++)
   {
       s[i] += code;
   }
}

void Decrypt(std::string &s, int code)
{
   for (int i = 0; i < s.length(); i++)
   {
       s[i] -= code;
   }
}



Aufruf dann mit:

C++:
std::string sName;
int code;

std::getline(cin, sName); // ist als Funktion implementiert, nicht als Methode
cin << code;

Encrypt(sName, code);

cout << sName; // verschlüsselte Ausgabe



bzw.

C++:
std::string sName;
int code;

std::getline(infile, sName); // ist als Funktion implementiert, nicht als Methode
cin << code;

Decrypt(sName, code);

cout << sName; // wieder original Name



Genau habe ich dein Programm nicht angesehen, aber z.B. bei

C++:
name==buffer;


sollte dein Compiler eigentlich eine Warnung geben (Vergleich statt Zuweisung).
Und um die Fehler zu finden, solltest du stets versuchen, das Programm aufzuteilen:
Standard ist EVA: Eingabe, Verarbeitung, Ausgabe.

Alles in die main-Funktion zu packen ist unübersichtlich und wie du siehst sind Fehler schwerer zu finden.

Viel Spaß noch beim Lernen von C++...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.12.2004, 10:32 Uhr
~Th
Gast


Ergänzung:

Auch ich mache mal beim Tippen Fehler, muß natürlich

C++:
cin >> code;


heißen... -)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.12.2004, 17:36 Uhr
morbid



merci muss ich mal testen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.12.2004, 17:50 Uhr
morbid



cool danke funzt perfekt

ahja noch ne frage wo ich grad dabei bin gibts bei c++ eine speicherfunktion mit der man datein speichern kann und später wieder auslesen und damit bestimmt einstellungen vornehmen (also zb wenn man ne sprachwahl funktion hat und der user dann eine sprache auswählt damit er dann beim nächsten mal nicht wieder die sprachen auswählen muss)?
wenn ja wie ist der code für?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: