# Text ver- und entschlüsseln



## tanja (1. Jun 2004)

Eine einfaches Verfahren, um einen Text zu verschlüsseln, ist das folgende: Der Klartext wird in Form einer Matrix aufgeschrieben, hier im Beispiel mit 9 Spalten. Dabei werden Leer- und Sonderzeichen ignoriert:

T H E Q U I C K B
R O W N F O X J U
M P S O V E R T H
E L A Z Y D O G

Um den verschlüsselten Text zu erhalten, wird der Text wie folgt aus der Matrix ausgelesen: Die erste Spalte wird von oben nach unten gelesen (TRME), dann folgt die zweite Spalten von unten nach oben gelesen (LPOH), die dritte wieder von oben, usw. Zusammengesetzt ergibt sich der verschlüsselte Text (zur Übersichtlichkeit mit Leerzeichen getrennt): TRME LPOH EWSA ZONQ UFVY DEOI CXRO GTJK BUH. Implementieren Sie die Methoden 
static char[] matrixEncode(char[] text, int cols)
static char[] matrixDecode(char[] text, int cols)

die nach diesem Verfahren Texte ver- und entschlüsseln können. cols bezeichnet die Spaltenanzahl der Matrix. Entschlüsseln Sie den folgende Text:

DIOTIAVIMRLENNANHETEAECIONGIWETHSIPNIORARHCBPOECFASOASAHYOSAETMNEBEMFARFETIVBRNTFTIDITRAIIHTSDUNDEGNSESANPOESEGIMO

DIOOIDWTASBACNMAINSNSECIOTGFSOIHGEATRTEOFNNIPMEAFAEEDRLETDRASOYHEOFCRIUISESEMPHTITPRIIHNSAOERBAVTNVAAENNGIMTNEIHEB

Hinweis:
Je nach Implementierung unterscheiden sie Ver- und Entschlüsselung nur minimal. Sie können alternativ eine Methode static char[] matrixCode(char[] text, int cols, boolean encode) schreiben, die abhängig vom encode-Parameter ver- oder entschlüsselt.

Umwandlung zwischen String und char[]:

String s = "text";
char[] c = s.toCharArray(); // hin
s = new String(c);          // zurück


So Jungs... hierbei bin ich echt überfordert. Würde mich über jede Hilfe sehr freuen. Vielen Dank schonmal


----------



## Maks (1. Jun 2004)

Als kleiner Hinweis für den Anfang:

Man gehe zu google und gebe "Matrix" ein
http://mindprod.com/jgloss/gotchas.html#MATRIX

ziehe evtl. noch ein Java Tutorial hinzu, siehe:
java-forum.org/de Foren-Übersicht -> Bücher, Tutorials und Links

und wenn man dann weiß, was eine Matrix ist, dann kann man erst mal ein wenig mit 
System.out.println (mat _ [j] );
experimentieren um sich eine Vorstellung davon zu machen, was mit den Buchstaben so passieren muß, damit es nach Verschlüsselung aussieht.

zur besseren Veranschaulichung:
char mat [0] [0] = "T";
char mat [1] [0] = "H";
char mat [2] [0] = "E";
char mat [3] [0] = "Q";
char mat [4] [0] = "U";
char mat [5] [0] = "I";
char mat [6] [0] = "C";
char mat [7] [0] = "K";
char mat [8] [0] = "B";
char mat [9] [0] = "R";
char mat [0] [1] = "O";
char mat [1] [1] = "W";
char mat [2] [1] = "N";
char mat [3] [1] = "F";
char mat [4] [1] = "O";

und hier gibts dann noch ein paar schöne Beispiele 
(gefunden in Google mit der Suche nach:"Matrix beispiele java"):

http://www.uni-koeln.de/rrzk/kurse/unterlagen/java/oop/samples/

Dann muß man noch eine passende Methode dazu schreiben (Variablen laut Vorgabe) und nimmt die gleiche Methode (in Umkehrung des Vorgangs) zum Entschlüsseln.

Das wäre jetzt so mein grober Vorschlag. Muß aber sagen, daß ich momentan auch nicht so einfach einen Code hinschreiben könnte..._


----------



## Reality (1. Jun 2004)

Maks hat gesagt.:
			
		

> zur besseren Veranschaulichung:
> char mat [0] [0] = "T";
> char mat [1] [0] = "H";
> char mat [2] [0] = "E";
> ...


Falsch!



```
char mat [0] [0] = "T";
char mat [1] [0] = "R";
char mat [2] [0] = "M";
char mat [0] [1] = "H";
char mat [1] [1] = "O";
usw.
```

Oder damit man es sich besser vorstellen kann:

```
char matrixDecode [][]= {
                       {'T', 'H', 'E', 'Q', 'U', 'I', 'C', 'K', 'B'},
                       {'R', 'O', 'W', 'N', 'F', 'O', 'X', 'J', 'U'},
                       {'M', 'P', 'S', 'O', 'V', 'E', 'R', 'T', 'H'},
                       {'E', 'L', 'A', 'Z', 'Y', 'D', 'O', 'G'} };
```

Liebe Grüße
Reality


----------



## Reality (1. Jun 2004)

So, ich habe dir den Code zum verschlüsseln geschrieben.
Mit new String(matrixDecode_[J]) ging das irgendwie nicht ???:L, darum habe ich valueOf genommen.



		Code:In die Zwischenablage kopieren


class DecodeEncode {
  public static void main(String[] args) {
  char matrixDecode [][]= {
                       {'T', 'H', 'E', 'Q', 'U', 'I', 'C', 'K', 'B'},
                       {'R', 'O', 'W', 'N', 'F', 'O', 'X', 'J', 'U'},
                       {'M', 'P', 'S', 'O', 'V', 'E', 'R', 'T', 'H'},
                       {'E', 'L', 'A', 'Z', 'Y', 'D', 'O', 'G'} }; 

char matrixEncode [][][][];
String decode="";
String tmp;
for( int j=0; j< matrixDecode.length; j++)
{
  for (int i = 0; i < matrixDecode.length; i++) {
    tmp = String.valueOf(matrixDecode[i][j]);
    decode=decode+tmp;
    }
   }
System.out.println(decode);
  }
}


Liebe Grüße
Reality

PS: Decodieren geht genau umgekehrt. _


----------



## Reality (1. Jun 2004)

Jetzt weiss ich warum new String(matrixDecode_[J]) nicht geht. Das geht nur mit eindimensionalen Arrays!
Dann hab ich es irgendwie anders gemacht, als der Lehrer es verlangte, aber das ist eigentlich egal.

Liebe Grüße
Reality_


----------



## Maks (1. Jun 2004)

Deine Korrektur Reality:
(jetzt bräuchte ich ein Smilie, das seine Hand vor den Kopf schlägt)

nicht schlecht der Code, dafür hätte ich erheblich länger gebraucht!
Bin gerade in Gedanken bei Roulette...aber DAS Thema ist wirklich auch interessant!


----------



## Reality (1. Jun 2004)

Oh, Mist!


j sollte größer sein als matrixDecode.length. 
Nur gibt es ein Problem:
Max größe bei 0:
[0][8]

Bei 3:
[3][7] ,da es ein Zeichen weniger hat.

Da bin ich jetzt überfragt!

@maks: Danke, aber der Code ist Scheiße wie du siehst.


----------



## Reality (1. Jun 2004)

Schummelei:  

```
for (int j = 0; j < 8; j++) {
    for (int i = 0; i < matrixDecode.length; i++) {
      tmp = String.valueOf(matrixDecode[i][j]);
      decode = decode + tmp;
        }
      }
for(int i=0; i<=2; i++)
{
decode = decode + String.valueOf(matrixDecode[i][8]);
}
System.out.println(decode);
```


----------



## Tanja (2. Jun 2004)

Hallöchen! 
Da bin ich wieder. Erstmal vielen Dank für die Vorarbeit  Bin echt beeindruckt in welcher kurzen Zeit Ihr die Aufgaben lösen könnt. Sitze immer zig Stunden bis ich einen Lösungsansatz gefunden habe.
@maks: der tipp mit den beispielen ist echt nicht schlecht, habe da viele aufgaben gefunden, die ich lösen muss *g* Danke *hihi*

Werde jetzt versuchen den Quellcode so anzupassen, dass ich Encodieren kann und diesen Text hier "DIOOIDWTASBACNMAINSNSECIOTGFSOIHGEATRTEOFNNIPMEAFAEEDRLETDRASOYHEOFCRIUISESEMPHTITPRIIHNSAOERBAVTNVAAENNGIMTNEIHEB" entschlüssen kann 

Nochmals vielen Dank euch beiden  Werde in naher Zukunft auch wohl weiterhin Hilfe gebrauchen :/
Tanja


----------

