# Skytale deokodierungsalgorithmus und mehr



## CrazyRyu (18. Jun 2007)

nabend ^^

also ich hab folgendes problem mit java.

2 Freunde und me sollen in informatik einen skytale algoritmus schreiben zum kodieren und dekodieren.
der soll auch nopch ein paar andere sachen können, aber primär haben wir das problem, dass wir nicht wissen wie wir dekodieren.

bisher benutzen wir folgen algoritmus zum kodieren: ( mehr haben wa in info noch nicht gelernt, also nicht wundern, wenn er schlecht ist  )


```
public void KodeActionPerformed(ActionEvent evt) {

                        int Textlaenge = Eingabefenster2.getText().length();
                        String Textlaengetext = String.valueOf(Textlaenge);
                        TextLength.setText(Textlaengetext);

                        String varZahl = Spaltenzahlfenster.getText();
                        int Zahl = Integer.parseInt(varZahl);

                        String text = InGrossbuchstaben.getText();
                        String NeuerText = grossbuchstaben;

                        int SZ = Zahl;
                        if(SZ > Textlaenge || SZ <= 0)
         {
          JOptionPane.showMessageDialog(null, "Die Spaltenzahl muss größer als Null und kleiner als die Textlänge sein");
         }
                        while(text.length() % SZ != 0){
                          text += " ";
                        }
                        
                        int ZZ = text.length() / SZ;
                        String VerschluesselterText = "";
                        for (int i = 0; i < ZZ; i++)
                        {
                          for (int j = 0; j < SZ; j++)
                          {
                            int Pos = (j*ZZ+i);
                            String Buchstabe = text.substring(Pos, (Pos+1));
                            VerschluesselterText += Buchstabe;
                          }
                        }
                        Kodieren.setText(VerschluesselterText);
```

tja ... wie macht man daraus wieder nen normalen text ? ^^

mfg crazyryu 

ps: die letzte aufgabe ist es, den kodierten text als tabelle ausgeben zu lassen und da haben wir bisher auch keine ahnung... unser lehrer hat uns son bisel ins kalte wasser gestoßen, da wir java zwar beherrschen sollen, aber er uns wenig zum programm selbst beigebracht hat... help plx :S also wenn jemand nett ist  bitte bitte bitte


----------



## CrazyRyu (18. Jun 2007)

weis wirklich keiner weiter?


----------



## Xellos (19. Jun 2007)

Hallo auch. 
Bin einer der besagten Freunde.
Wir wollen nicht, dass ihr die Aufgabe für uns macht.
Wir haben über Java einfach nur nichts beigebracht bekommen :S 
Er sagte einfach ladet euch den Java Editor und macht mal...
Ich komme mir vor, als würde mir jemand nen Text auf Russisch geben und sagen: "lies vor"... ich kann nunmal kein Russisch und genau so komm ich mir hier vor... er sagt kodiert und dekodiert mal ... aber wir sprechen die Sprache nicht.
Es gibt Online zwar Wörterbücher, aber die sind gigantisch und viel zu umfangreich für die kurze Zeit, die wir haben. Wir wollen ja nicht einmal die perfekte Lösung... aber so viel, dass ein Laie es sich selbst erarbeiten kann... und mit Laie meine ich wirklich vollkommener Anfänger ... was wir da Oben haben, haben wir mit viel Hilfe erstellt


----------



## Faruun (19. Jun 2007)

http://www.bastie.de/index.html?/ja...tAndDecryptWithJavaCryptographyExtension.html

Vielleicht hilft es Euch ja


----------



## madboy (19. Jun 2007)

So weit ich informiert bin, wird der "skytale algorithmus" auf ein Array angewendet.
Was ich meine: Der zu verschlüsselnde Text wird zeilenweise in eine "Tabelle" geschrieben und dann spaltenweise wieder ausgelesen.
Folglich wird es am besten sein, ihr macht euch auch so eine "Tabelle", wo ihr zeilenweise reinschreibt und dann die Spalten wieder auslest. 
So weit zur Theorie  :wink: 

In Java gibts Arrays (mit beliebiger Dimension).

```
String[] array = new String[10]; // Array mit 10 Positionen. Vorsicht: das erste Element hat den Index 0!
String[][] zweidimensional = new String[5][10]; //5 * 10 Array. Damit lassen sich Matrizen, Tabellen, ... darstellen. Sowas könntet ihr gebrauchen.

//füllen von Arrays:
array[0] = "bla";
array[1] = "blubb";
zweidimensional[0][1] = "bla2";

//Zugriffe auf Arrays:
String s = array[1];
String s2 = zweidimensional[0][1];
```

Wenn ihr jetzt verschlüsseln wollt, schreibt ihr den Text Buchstabe für Buchstabe in ein zweidimensionales Array

```
String text = "das soll verschlüsselt werden";
        
        int spaltenZahl = 3;
        
        int zeilenZahl = (text.length() / spaltenZahl) + 1;
        
        char[][] zweidimensional = new char[spaltenZahl][zeilenZahl];
        
        int textPosition = 0;
        for (int spalte = 0; spalte < zweidimensional.length; spalte++) {
            for (int zeile = 0; zeile < zweidimensional[spalte].length; zeile++) {
                
                if(textPosition >= text.length()) {
                    break;
                }
              zweidimensional[spalte][zeile] = text.charAt(textPosition);
              textPosition++;
            }
            
            if(textPosition >= text.length()) {
                break;
            }
         }
```

Den verschlüsselten Text bekommt ihr dann, wenn ihr spaltenweise auslest

```
String verschluesselt = "";
        for (int zeile = 0; zeile < zweidimensional[0].length; zeile++) {
            for (int spalte = 0; spalte < zweidimensional.length; spalte++) {

                verschluesselt += zweidimensional[spalte][zeile];
            }

         }
        
        System.out.println(verschluesselt);
```

Beim Entschlüsseln gehts rückwärts. Ihr schreibt den Text spaltenweise

```
textPosition = 0;
        for (int zeile = 0; zeile < zweidimensional[0].length; zeile++) {
            for (int spalte = 0; spalte < zweidimensional.length; spalte++) {
                
                if(textPosition > text.length()) {
                    break;
                }
              zweidimensional[spalte][zeile] = verschluesselt.charAt(textPosition);
              textPosition++;
            }
            
            if(textPosition > text.length()) {
                break;
            }
         }
```

Dann wird zeilenweise ausgelesen

```
String entschluesselt = "";
        for (int spalte = 0; spalte < zweidimensional.length; spalte++) {
            for (int zeile = 0; zeile < zweidimensional[spalte].length; zeile++) {

                entschluesselt += zweidimensional[spalte][zeile];
            }

         }
        
        System.out.println(entschluesselt);
```

Das geht auch ohne Arrays, aber mit Arrays ist es anschaulicher (meine Meinung).


----------



## CrazyRyu (20. Jun 2007)

vielen dank für deine hilfe


----------

