Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

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

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
11.11.2006, 21:25 Uhr
~Tomo
Gast


Hallo,
ich arbeite gerade an einen eigenen En-/Decoder mit eigenen Verschlüsselungen.
Das Verschlüsseln klappt super aber mit dem Entschlüsseln gibts Probleme.
In einer .dat Datei stehen die Daten wie z.b. a = ABCDEFG,ABCD,ABCDE. Also zu jedem Zeichen/Buchstaben sind 3 verschiedene verschlüsselungen zugewiesen.
Ist für mich etwas schwer zu erklären deshalb habe ich mal alles hochgeladen (BCB6.0).

Was genau beim Decoden nicht funktioniert weiß ich nicht und mit dem Debugger finde ich auch nichts (bin 4,5 mal durchgegangen). Liegt wohl daran das ich das nicht so oft benutze ^^
Ich hoffe mir kann einer helfen.

Link: www.yourfileupload.com/file.php?file=910569eb1f7ae7e2cbffc62a1ea6d0cc

Vielen Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.11.2006, 17:55 Uhr
ao

(Operator)



Zitat von ~Tomo:
Ist für mich etwas schwer zu erklären deshalb habe ich mal alles hochgeladen (BCB6.0).

Hallo Tomo,
es ist in diesem Forum üblich, den Quellcode direkt zu posten, damit gleich über die fraglichen Stellen diskutiert werden kann.

Gruß,
ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.11.2006, 00:08 Uhr
~Tomo
Gast


ok sorry



C++:
TStringList *liste1;
TStringList *liste2;
TStringList *liste3;
int ilang=1;
int izeichen=1;
bool blang=false;
//--------------------------------------------------------------------
liste1=new TStringList;
liste2=new TStringList;
liste3=new TStringList;
liste1->Text=Memo1->Text;
liste1->Add("");
liste1->Add("");
liste2->LoadFromFile("dd62v2.dat");
for(int ilines=0;ilines<liste1->Count;ilines++)
  {
  liste3->Add("");
  }
for(int zeile=0;zeile<liste1->Count;zeile++)
  {
  if(blang==true)
    {
    ilang=1;
    blang=false;
    }
  if(ilang==1)
    {
    for(int ezeile=2;ezeile<liste2->Count;ezeile++)
      {
      if(liste1->Strings[zeile].SubString(izeichen,liste2->Strings[0].SubString(1,2).ToInt())==liste2->Strings[ezeile].SubString(5,liste2->Strings[0].SubString(1,2).ToInt()))
        {
        liste3->Strings[zeile]=liste3->Strings[zeile]+liste2->Strings[ezeile].SubString(1,1);
        izeichen=izeichen+liste2->Strings[0].SubString(1,2).ToInt();
        if(ilang>3)
          {
          blang=true;
          }
        }
      }
    }
  if(ilang==2)
    {
    for(int ezeile=2;ezeile<liste2->Count;ezeile++)
      {
      if(liste1->Strings[zeile].SubString(izeichen,liste2->Strings[0].SubString(4,2).ToInt())==liste2->Strings[ezeile].SubString(6+liste2->Strings[0].SubString(1,2).ToInt(),liste2->Strings[0].SubString(4,2).ToInt()))
        {
        liste3->Strings[zeile]=liste3->Strings[zeile]+liste2->Strings[ezeile].SubString(1,1);
        izeichen=izeichen+liste2->Strings[0].SubString(4,2).ToInt();
        if(ilang>3)
          {
          blang=true;
          }
        }
      }
    }
  if(ilang==3)
    {
    for(int ezeile=2;ezeile<liste2->Count;ezeile++)
      {
      if(liste1->Strings[zeile].SubString(izeichen,liste2->Strings[0].SubString(4,2).ToInt())==liste2->Strings[ezeile].SubString(7+liste2->Strings[0].SubString(1,2).ToInt()+liste2->Strings[0].SubString(4,2).ToInt(),liste2->Strings[0].SubString(7,2).ToInt()))
        {
        liste3->Strings[zeile]=liste3->Strings[zeile]+liste2->Strings[ezeile].SubString(1,1);
        izeichen=izeichen+liste2->Strings[0].SubString(7,2).ToInt();
        if(ilang>3)
          {
          blang=true;
          }
        }
      }
    }
  }
Memo1->Clear();
Memo1->Text=liste3->Text;
delete liste1;
delete liste2;
delete liste3;
ilang=1;
izeichen=1;


und so sieht die .dat datei aus: (nur 4 buchstaben um das programm mit "hallo" zu testen

Code:
10,12,09
[space]aáàâäbcçdeéèêfghiíìîjklmnoóòôöpqrstuúùûüvwxyz
  = bhebgbsfsj,dk§ocmA3l3ü",MEIJfdcvf
a = hlFDBHfkbf,CNe3872shgSc,KAkwnVCds
h = mkZfHBfbsd,Cne3h389fhnf,,ä;$'dfö+
l = iefHNfnnfl,J§(fjndni§kd,F;FIW892ß
o = fkslkgkndc,D§äör3*ܧOvc,MCN32lidD

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.11.2006, 12:24 Uhr
Th



Sorry, aber dein Source-Code ist grottig.

Allein die Zeile

C++:
if(liste1->Strings[zeile].SubString(izeichen,liste2->Strings[0].SubString(4,2).ToInt())==liste2->Strings[ezeile].SubString(7+liste2->Strings[0].SubString(1,2).ToInt()+liste2->Strings[0].SubString(4,2).ToInt(),liste2->Strings[0].SubString(7,2).ToInt()))


könntest du um einiges leserlicher und effizienter programmieren...

Du schreibst 3 mal dasselbe. Dafür solltest du entweder ein Array benutzen oder aber dafür eine eigene Funktion schreiben, welche entsprechende Parameter bekommt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.11.2006, 14:14 Uhr
~Tomo
Gast


Ja ich weiß bin noch nicht sehr weit bei C++
kann man mir da nicht trotzdem helfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.11.2006, 14:33 Uhr
ao

(Operator)


Das ist ziemlich kryptisch, was du da geschrieben hast, nimm doch mal ordentliche Bezeichner und nicht liste1, liste2, liste3. Nenn die Listen nach dem, was sie enthalten.

Und was bedeuten ilang und blang, mindestens ein kurzer Kommentar wär da angebracht, besser noch ein aussagekräftiger Name. Wenn wir für dich debuggen sollen, müssen wir zumindest verstehen, was da geplant war.

Sei dir nicht zu schade, über passende Variablennamen nachzudenken; alle, die deinen Code lesen müssen, werden dir dankbar sein.

Zitat:
if(liste1->Strings[zeile].SubString(izeichen,liste2->Strings[0].SubString(4,2).ToInt())==liste2->Strings[ezeile].SubString(7+liste2->Strings[0].SubString(1,2).ToInt()+liste2->Strings[0].SubString(4,2).ToInt(),liste2->Strings[0].SubString(7,2).ToInt()))

Sag selbst: Hältst du das für lesbaren Code? Wer soll das schnallen?

Dieser Post wurde am 13.11.2006 um 14:33 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.11.2006, 23:00 Uhr
~Tomo
Gast


Also zu dieser Zeile: Nein^^
Aber ich kann es leider nicht anders. Ich habe so ein projekt schonmal gemacht nur nicht mit 3 Verschlüsselungs möglichkeiten pro Buchstabe da hießen die noch anders. Habe für mich selber liste1,liste2 und liste3 gemacht, konnte nicht Ahnen das es für mich so schwer wird.

liste1 ist der Text den man in das Memo eingibt,
liste2 ist die datei .dat datei mit den verschlüsselungen
und in liste3 wird das ergebnis reingeschrieben und am ende ins Memo gesetzt

ilang (i(nteger)länge) kann den wert 1, 2 oder 3 haben während der Laufzeit.
Beispiel:
wenn ilang==1 ist, wird aus der datei mit den verschlüsselungen das erste ausgewählt
(bei X = ab,cde,fghi also "ab") bei ilang==2 dann cde.

Ich habe versucht das Problem mit dem boolean blang (b(oolean)länge) zu Lösen (weiß nicht wieso, vielleicht ist es sogar sinnlos) Sodass nach jedem durchgang, wenn ein Buchstabe zum ersetzen gefunden wurde, blang=true gesetzt wird und dann beim nächsten durchlauf ilang um den wert 1 erhöht wird (wenn höher als 3 wieder auf 1). Wahrscheinlich liegt da irgendwo das Problem aber ich weiß es nicht.

MfG Tomo
 
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: