Seite 1 von 3

Probleme bei Enigma-Verschlüsselung

Verfasst: Mo Mär 26, 2012 10:21 pm
von Kmitska
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)

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Mo Mär 26, 2012 10:46 pm
von Xin
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.

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 6:05 am
von Kmitska
Wie schon erwähnt, mit cout siehts gut aus. :) und text ist z. B. "kmitska"

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 8:02 am
von Xin
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.

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 12:30 pm
von fat-lobyte
Bitte lies dir kurz diesen Beitrag durch: http://www.proggen.org/doku.php?id=faq:frageformulieren

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 7:43 pm
von Kmitska
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.

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 8:30 pm
von Bebu
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.

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 8:38 pm
von fat-lobyte
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.

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 8:53 pm
von Kmitska
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.

Re: Wieso geht das nicht, Problem in Funktion

Verfasst: Di Mär 27, 2012 9:31 pm
von canlot
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) ;)