Kodierung

Fleurasis

Mitglied
Ich habe ein kleines Problem.
Ich bin seit ein par Tagen dabei den Fehler in meiner Programmierung zu suchen. :rtfm:
Sinn und Zeck des ganzen Teil-Programms soll es sein, einen Text, vollständig ver und entschlüsseln zu können.
Da ich allerdings nach mehreren Test festgestellt habe, dass diesen nicht zuverlässig arbeitet, muss irgendwo ein Fehler sein, den ich nicht sehe. :bahnhof:


Es wäre nett, wenn Ihr mir da weiter helfen könntet. :(

Java:
char y = 'a';
    final String text      = "Wenn ich versuche, diesen Text zu entschluesseln, dann kommt nur Bahnhof dabei raus.";
          String kodierterText = "";
          String dekodierterText = "";
    final String ABCD       = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    final String abcd       = "abcdefghijklmnopqrstuvwxyz";
    final String ABCDArr [] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    final String abcdArr [] = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    final int kodierung  [] = {3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6,4,3,5};
          int position   [] = new int [text.length()];
    String container     [] = new String [text.length()];
    int x = 0;

    for (int i = 0;i < text.length();i++ )
    {

      container [i] = text.substring(text.length()-text.length()+i);

      container [i] = container[i].substring(0,container[i].length()-container[i].length()+1);

      System.out.print (container [i]);

    }
    System.out.println();


    for (int i  = 0;i < text.length();i++)
    {


      if (ABCD.indexOf(container[i]) > -1)
      {
       position [i] = ABCD.indexOf(container[i]);
       y = 'x';
      }
      else
      {
       if (abcd.indexOf(container[i]) > -1)
       {
         position [i] = abcd.indexOf(container[i]);
       }
       else
       {
         if (container[i].equals("/"))
         {
           position[i] = -44;
         }
         if (container[i].equals("."))
         {
           position [i] = -34;
         }
         if (container[i].equals(","))
         {
           position [i] = -24;
         }
         if (container[i].equals(" "))
         {
           position[i] = -14;
         }

       }
      }

      if (position[i] > -1)
      {
        position [i] = position [i] + kodierung[x];
      }

      if (position[i] > 25)
      {
        position[i] = position[i]-26;
      }

      if (y == 'x')
      {
        if (position[i]>0)
        {
          kodierterText = kodierterText+ABCDArr[position[i]];
          y = 'a';
        }
        if (position[i] == -14)
        {
           kodierterText = kodierterText+" ";
        }
        if (position [i] == -24)
        {
          kodierterText = kodierterText+",";
        }
        if (position [i] == -34)
        {
          kodierterText = kodierterText+".";
        }
        if (position [i] == -44)
        {
          kodierterText = kodierterText+"/";
        }

      }
      else
      {
        if (position[i]>0)
        {
          kodierterText = kodierterText+abcdArr[position[i]];
        }
        if (position[i] == -14)
        {
           kodierterText = kodierterText+" ";
        }
        if (position [i] == -24)
        {
          kodierterText = kodierterText+",";
        }
        if (position [i] == -34)
        {
          kodierterText = kodierterText+".";
        }
        if (position [i] == -44)
        {
          kodierterText = kodierterText+"/";
        }


      }
      x++;
      if (x == 26)
      {
       x = 0;
      }
    }

 //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ab hier dekodierung<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    for (int i = 0;i < kodierterText.length();i++)
    {
      container[i] = "";
    }

    for (int i = 0;i < kodierterText.length();i++ )
    {

      container [i] = kodierterText.substring(kodierterText.length()-kodierterText.length()+i);

      container [i] = container[i].substring(0,container[i].length()-container[i].length()+1);

      System.out.print (container [i]);

    }


    for (int i = 0 ;i < kodierterText.length();i++ )
    {
     position [i] = ABCD.indexOf(container[i]);
     
     if (position [i] < 0)
     {
       position[i] = abcd.indexOf(container[i]);

     }
     if (container [i].equals(" "))
     {
      position [i] = -14;
     }
     if (container[i].equals(","))
     {
      position [i] = -24;
     }
     if (container[i].equals("."))
     {
      position[i] = -34;
     }
     if (container[i].equals("/"))
     {
      position[i] = -44;
     }

    }
    x = 0;

    for (int i = 0;i < kodierterText.length();i++ )
    {
      if (position[i] == ABCD.indexOf(container[i]) && position [i] > -1 )
      {
        position [i] = position [i] - kodierung[x];
        if (position [i] < 0 )
        {
          position [i] = position[i] +26;
        }
        container[i] = ABCDArr [position[i]];
      }

      if (position[i] == abcd.indexOf(container[i]) && position [i] > -1 )
      {

        position [i] = position [i] - kodierung[x];

        if (position [i] < 0)
        {
          position [i] = position[i] +26;
        }
        container[i] = abcdArr [position[i]];


      }

      if (position [i] == -14)
      {
        container [i] = " ";
      }
      if (position [i] == -24)
      {
        container [i] = ",";
      }
      if (position [i] == -34)
      {
        container [i] = ".";
      }
      if (position [i] == -44)
      {
        container [i] = "/";
      }
      x++;
      if (x == 26)
      {
       x = 0;
      }
      dekodierterText = dekodierterText+container[i];
    }
    System.out.print("\n"+dekodierterText);
 
S

SlaterB

Gast
das ist ja mal ein schönes Schlamassel, so ein langer Code,
aber auch nette Suchaufgabe, nehme ich immer gerne an in so einfachen Fällen nur mit Variablen herumschubsen

wie könntest du es selber lösen?
denkbar einfach, nur jeden einzelnen Arbeitsschritt anschauen, was kommt für jedes i an position raus, was wird am kodierten Text angefügt,
wie läuft die Rücktransformation ab usw.
idealerweise erst an verdächtigen Stellen wie dem ersten falschen Wert, wenn dort nichts direkt zu erkennen ist,
dann langsam rückwärts

das Problem ist hier ca. Stelle 37, das erste s in 'entschlüsseln',
wird mit Code-Wort zufällig auf 26 abgebildet und dann auf 0 korrigiert, was im weiteren nicht richtig verarbeitet wird,
überlege mal was bei position == 0 passieren soll und welcher Code dafür zuständig ist
 

Fleurasis

Mitglied
Ich könnte mich selbst verprügeln! :lol: ;(
Da setzt man mal 2 Werte falsch und schon geht alle vor die Hunde!


Danke Dir, dass du dir so viel Mühe gemacht hast, das mal auseinander zu friemeln!
Du hast mir echt weiter geholfen! :applaus:
 
S

SlaterB

Gast
es sind übrigens zwei 'if (position>0)'-Stellen bei der Verschlüsselung, wie ich gerade sehe,
hoffentlich beide korrigiert,
derartige Code-Verdopplung ist immer gefährlich, wobei hier wohl nicht ganz so leicht zu verhindern wie in anderen Fällen
 

Fleurasis

Mitglied
Ich habe ja versucht das ganze so kurz und übersichtlich wie irgend möglich zu halten aber mehr beziehungsweise weniger habe ich nicht auf die Rehe bekommen.
Und ja, ich habe beide Stellen korrigiert, als der "Groschen" gefallen ist. :)
 

Ähnliche Java Themen

Neue Themen


Oben