Probleme bei Enigma-Verschlüsselung

Schnelle objektorientierte, kompilierende Programmiersprache.
Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Probleme bei Enigma-Verschlüsselung

Beitrag von Kmitska » Mo Mär 26, 2012 10:21 pm

Moin Leute,

versuche nun Enigma nachzuprogrammieren, so weit so gut.
Alles funktioniert so wie ich will.

Nun das Problem:
Beim entschlüsseln stimmt etwas nicht!
Ab 5. Character kommen falsche Zeichen bei "return" aber wenn ich das mit 'cout' aus der Funktion aus schreibe stimmt es.

Code: Alles auswählen

string decode(string text)
{
    int dif = ((int) 'a') - ((int) 'A');
    int tmp=0;
    for(int i=0; i<text.length(); i++)
    {
        for(int n=0; n<=25; n++)
        {
            if(text[i] == (char) encodeTable[tmp+1][n])
            {
                text[i] = (char) encodeTable[0][n]; // HIEERRRRR!!! cout << (char) encodeTable[0][n] << endl; stimmt und so nicht!
            }
        }
        if(tmp == 10){
            tmp=0;
        }else{
            tmp=i;
        }
        tmp++;
    }
    return text;
}
Danke im Voraus.
Kind regards,
Kmitska

Titel geändert (dani93)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von Xin » Mo Mär 26, 2012 10:46 pm

Mach ein komplettes Programm. Hier sehe ich weder, wie encodeTable aussieht, noch welcher String reinkommt und wie dieser an der 5. Stelle aussieht.

Ansonsten gib halt nach der Zuweisung erstmal per

Code: Alles auswählen

cout << text[i]
aus, ob da wirklich was schief geht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von Kmitska » Di Mär 27, 2012 6:05 am

Wie schon erwähnt, mit cout siehts gut aus. :) und text ist z. B. "kmitska"

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von Xin » Di Mär 27, 2012 8:02 am

Kmitska hat geschrieben:Wie schon erwähnt, mit cout siehts gut aus. :)
Wie schon schon in meinem vorherigen Post erwähnt...

Entweder hilfst Du mir, Dir zu helfen oder nicht. Im zweiten Fall steige ich hier aus, denn ich kann Dir nicht helfen, wenn Du mir demonstrativ notwendige Informationen vorenthältst.
Also erstelle einen kompilierfähigen und ausführbaren Quelltext, der Dein Problem demonstriert und schreib auf, was Du erwartest und was Du stattdessen bekommst und dann poste das.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von fat-lobyte » Di Mär 27, 2012 12:30 pm

Bitte lies dir kurz diesen Beitrag durch: http://www.proggen.org/doku.php?id=faq:frageformulieren
Haters gonna hate, potatoes gonna potate.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von Kmitska » Di Mär 27, 2012 7:43 pm

Ja ich weiß, dieser Link zerstört mein Leben...

Das Problem ist: Ich mag es nicht meine Sources zu teilen.

Ich versuch es lieber selber zu machen, was ich schon seit 2-3 Tagen versuche.
Aber das merkwürdige ist, mit cout läuft alles so wie ich will! und beim string kanns ja nicht liegen.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von Bebu » Di Mär 27, 2012 8:30 pm

Du musst ja nicht das ganze Programm hier reinstellen. Aber baue wenigstens einen kleinen Prototyen, damit man das Problem nachvollziehen kann. Die Enigma ist nichts geheimes mehr, ich bezweifle also, das dir jemand eine Idee stehlen kann.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von fat-lobyte » Di Mär 27, 2012 8:38 pm

Kmitska hat geschrieben:Das Problem ist: Ich mag es nicht meine Sources zu teilen.
Kleiner Tip am Rande: wenn du versuchst was kommerzielles zu machen, würde ich dir als Anfänger davon abraten. No offense, aber du wirst noch lange nichts verkaufbares produzieren.

Wenn du angst um deinen Schlüssel hast, dann 1) erstell einen neuen Schlüssel 2) Kompiliere und teste das Programm, kuck ob der Fehler noch immer auftritt und 3) poste das ganze Programm
Aber das merkwürdige ist, mit cout läuft alles so wie ich will! und beim string kanns ja nicht liegen.
1) In programmen passieren manchmal seltsame, mysteriöse Dinge. Übernatürliche. Nur dass sie nicht so übernatürlich sind, sondern es handelt sich einfach um irgendwelche "side effects" von Code, der nicht gezeigt wird.
Es kann also passieren, dass dein Code völlig korrekt ist, und der Bug in dem Code sitzt, den du nicht zeigst.
2) Wir sind Menschen. Menschen mit Arbeit/Studium/Hobby. Wir helfen gerne , aber Debuggen macht nicht immer viel Spaß.
Da hilft es schon SSEEEEEHHHRR viel, wenn man Code hat, den man einfach in eine Datei copy-pasten kann und dann den Debugger drüberlaufen lassen kann.
Also ein persönlicher Tipp von mir: solltest du jemals ein Problem haben, versuche den Code so weit wie möglich zu verkleinern, ohne deinen Bug zu entfernen und dann schicke eine kompilierbare Version mit deiner Frage mit. Hier auf proggen.org haben wir alle lieb, aber solltest du mal auf stackoverflow.com oder im Usenet oder auf Mailinglisten posten, wird dir keiner Antworten wenn du nicht selbst genug Vorarbeit geleistet hast.
Haters gonna hate, potatoes gonna potate.

Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von Kmitska » Di Mär 27, 2012 8:53 pm

Ich poste jetzt einfach...
Also hier die Header-Datei:
crypter.h:

Code: Alles auswählen

using namespace std;

int encodeTable[20][26];
int encodeTableTwo[20][26];

bool ImplementEncode()
{
    int NUM_begin=0, NUM_end=0;
    int b = 'a';
    NUM_begin = b;
    b = 'z';
    NUM_end = b+1;
    int dif = ((int) 'a' - (int) 'A');

    for(int n=0; n<=10; n++)
    {
        static int begin=0;
        static int count=0;
        static int c = 0;
        if(n==0){
            begin = NUM_begin;
        }else{
            begin = NUM_begin + count *2;
        }

        for(int g=0; g<=25; g++)
        {
            encodeTable[count][c] = begin;
            encodeTableTwo[count][c] = begin-dif;
            begin++;
            c++;
            if(begin == 1+ (int)'z'){
                begin=NUM_begin;
            }
        }
        c = 0;
        count++;
    }
}

string encode ( string text )
{
    int NUM_begin=0, NUM_end=0;
    int b = 'a';
    NUM_begin = b;
    b = 'z';
    NUM_end = b+1;
    int dif = ((int) 'a' - (int) 'A');

    for(int i=0; i< text.length(); i++){
        int row=0,c=0;
        bool cap=false;

        for(int a=NUM_begin; a<=NUM_end; a++)
        {
            if( (int) text[i] == a )
            {
                row=c;
                cap=false;
            }else if( (int) text[i] == a-dif)
            {
                row=c;
                cap=true;
            }
            c++;
        }
        if(cap == false){
            text[i] = (char) encodeTable[i+1][row];
        }else if(cap == true){
            text[i] = (char) (encodeTableTwo[i+1][row]);
        }
    }
    return text;
}

string decode(string text)
{
    int dif = ((int) 'a') - ((int) 'A');
    int tmp=0;
    for(int i=0; i<text.length(); i++)
    {
        for(int n=0; n<=25; n++)
        {
            if(text[i] == (char) encodeTable[tmp+1][n])
            {
                text[i] = (char) encodeTable[0][n];
            }
        }
        if(tmp == 10){
            tmp=0;
        }else{
            tmp=i;
        }
        tmp++;
    }
    return text;
}
main.cpp:

Code: Alles auswählen

#include <iostream>

using namespace std;

#include "crypter.h"

int main ( void )
{
    ImplementEncode();

    cout << decode (encode("kmitska")) << endl;
}
Was solls, ist eh nicht viel.

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Wieso geht das nicht, Problem in Funktion

Beitrag von canlot » Di Mär 27, 2012 9:31 pm

Kmitska hat geschrieben:Ja ich weiß, dieser Link zerstört mein Leben...

Das Problem ist: Ich mag es nicht meine Sources zu teilen.

Ich versuch es lieber selber zu machen, was ich schon seit 2-3 Tagen versuche.
Aber das merkwürdige ist, mit cout läuft alles so wie ich will! und beim string kanns ja nicht liegen.
Ich glaube hier will keiner deine Sources verwenden(nicht böse gemeint) ;)
Unwissenheit ist ein Segen

Antworten