PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie differenziere ich mehrer Wörter aus einer Textarea in ein String-Array



Jones97
28.02.2016, 11:09
Hallo Leute,
ich schreibe gerade ein Programm für die Schule, eine Zusatzaufgabe die bisher niemand geschafft hat. Wir haben ein Verschlüsseltes Wort, wo wir den Schlüssel nicht kennen. Nun sollen wir es knacken. Mein Ansatz ist es, die Länge (19 Buchstaben zu nehmen, und mit anderen deutsche Wörter mit 19 Buchstaben zu vergleichen. Also z.B der Buchstabe an der 1. Stellle ist der Selbe wie der an der 5. Stelle oder so.
Nun habe ich ein kleines Programm geschrieben, da ich die 4958 Wörter nicht von Hand vergleichen wollte ;) Nun meien Frage, wie schaffe ich es, dass ich in meine Textarea alle 4958 Wörter packen kann und sie dann einzeln in ein String Array speichern kann ? Getrennt sind sie mit einem Zeilenumbruch ("\n"), kann man diesen evt. nutzenm um sie zu differenzieren ?
LG
Jones97

Death~
28.02.2016, 12:16
Was genau weißt du denn über die Verschlüsselung? Habe ich das richtig verstanden, dass die Verschlüsselung nur die Buchstaben vertauscht, oder wie kommst du darauf, dass dein entschlüsseltes Wort auch aus 19 Zeichen besteht? Vielleicht kannst du mal die Textaufgabe hier posten.

WD40
28.02.2016, 12:31
Jones benutz doch mal google bevor du free-hack einen riesigen OT Thread bescherst..
Cryptool erfüllt alle deine wünsche solange du es nicht selber schreiben musst.

Jones97
28.02.2016, 12:35
Was genau weißt du denn über die Verschlüsselung? Habe ich das richtig verstanden, dass die Verschlüsselung nur die Buchstaben vertauscht, oder wie kommst du darauf, dass dein entschlüsseltes Wort auch aus 19 Zeichen besteht? Vielleicht kannst du mal die Textaufgabe hier posten.
Ich weiß die Art der Verschlüsselung ( Verschlüsselung mit Schlüsselwort, so lautet die Überschrift)
Hier wäre der Schlüssel Führerschein:


Klar
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


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


Das hier ist die Aufgabe:
Aufgabe 2 (Zusatz): Entschlüssele den Geheimtext YDHJIXZVHXKMDSDUBMH.
Ich habe hier aber den Schlüssel nicht.
Aber ich weiß dass das Wort monoalphabetisch verschlüsselt wurde.
Prinzipiel muss ich mein Programm nur noch dahingehend programmieren, das die Wörter einzeln eingelesen werden.

---------- Post added at 13:35 ---------- Previous post was at 13:34 ----------


Jones benutz doch mal google bevor du free-hack einen riesigen OT Thread bescherst..
Cryptool erfüllt alle deine wünsche solange du es nicht selber schreiben musst.

Der Lehrer will unserern Lösungsweg sehen und wir sollen keine Vorgefertigten Lösungen nutzen...

Death~
28.02.2016, 13:00
Also am Einlesen in einen String Array soll es nicht scheitern:


String deinArray[] = deineWoerter.split("\\r?\\n");

Edit: Ups, habe vergessen dass du eine Wordlist hast, ich zeig dir gleich meinen Ansatz

Jones97
28.02.2016, 13:17
Also am Einlesen in einen String Array soll es nicht scheitern:


String deinArray[] = deineWoerter.split("\\r?\\n");

Edit: Ups, habe vergessen dass du eine Wordlist hast, ich zeig dir gleich meinen Ansatz

Hier mein Code der für das einlesen zuständig ist:

String str = txaMoeglich.getText();
String[] strArray = new String[] {str} ;

Wie muss ich diesen jetzt verändern ?

Death~
28.02.2016, 13:23
String strArray[] = str.split("\\r?\\n");

Zum Entschlüsseln:

Ich würde mir erstmal eine Funktion schreiben, die ein Muster basierend auf den Buchstabenvorkommen erstellt und dann mit den Mustern der möglichen Wörter abgleicht. So kannst du das Ganze zumindest einschränken. Wörter, die in ihrer Wortlänge von der des verschlüsselten Wortes abweichen, kannst du natürlich vorher rausfiltern.

Beispiel anhand deiner Führerschein-Verschlüsselung:

Verschlüsseltes Wort sei: IFXXT
Muster: 1-2-3-3-4

Wordlist:

TEST
HALLO
DEATH
ABCAB

Ablauf:

TEST fliegt raus, da Wortlänge nicht 5.
Muster zu HALLO: 1-2-3-3-4
Muster zu DEATH: 1-2-3-4-5
Muster zu ABCAB: 1-2-3-1-2

Übereinstimmung des Musters bei HALLO

blackberry
28.02.2016, 15:02
Werter Herr Death~,
ich bin zutiefst enttäuscht von eurer Kurzsichtig. Es wurde doch weder vernünftig das Verschlüsselungsverfahren beschrieben, noch hinreichend viel Information gegeben. Nach aktuellem Kenntnisstand könnte es sich bei der Verschlüsselung um einen One-time pad, bei dem Lehrer um einen Troll und diesem Unterfangen um Zeitverschwendung handeln.
(Abgesehen davon: wer hat behauptet, dass es sich bei dem Klartext um ein deutsches Wort handeln soll?)

Faceplam'end
blackberry

Death~
28.02.2016, 15:23
Ich weiß die Art der Verschlüsselung ( Verschlüsselung mit Schlüsselwort, so lautet die Überschrift)
[...]
Aber ich weiß dass das Wort monoalphabetisch verschlüsselt wurde.

Zusammen mit dem Führerschein-Beispiel aus Aufgabe 2 und der Tatsache, dass es sich hier um eine Zusatzaufgabe zu Aufgabe 2 handelt, fand ich die Annahme berechtigt, dass es sich um die gleiche Verschlüsselung mit anderem, unbekannten Schlüssel handelt. Aber deine Theorie finde ich auch sehr spannend.

War der geklammerte Satz an mich gerichtet, Herr Schwarzbeere? Verstehe nicht ganz, was Sie meinen.

blackberry
28.02.2016, 15:56
Der geklammerte Satz richtet sich an Jones97. Was die Verschlüsselung angeht:
1) Ich werde aus dem gegebenen Beispiel nicht wirklich schlauer. Der Schlüssel, oder was auch immer scheint übrigens "Fuehrerschein" und nicht "Führerschein" zu sein, aber selbst dann ist mir nicht klar, wie man den Ciphertext aus Schlüssel und Klartext zu bestimmen hätte.
2) Aus informationstheoretischer Sicht muss mir das auch gar nicht klar sein. Alles was mir gegeben wurde, war ein Beispiel, aber kein Verfahren. Das kann man im Wesentlichen auf völlig beliebige Weise zu einem Verfahren fortsetzen. Kleines Beispiel: was ist die nächste Zahl in der Folge 0, 0, 0, 0, 0, 0? Die Antwort gibt es hier:
Ganz offensichtlich 99, da ich die Werte durch "99*abrunden(n/7)" für n=1,2,... generiert habe. Wie hättet ihr das wissen können? Gar nicht. Ich hätte eben so gut behaupten können die Folge mit "42*abrunden(n/7)" generiert zu haben, womit die nächste Zahl 42 gewesen wäre, oder auch sagen können, dass es sich um die Folge handelt, die nur aus lauter Nullen besteht.

Zurück zum Thema: unter der Annahme, dass es sich um ein One time pad handelt (was durchaus möglich ist, da wir keine Information über die Länge des unbekannten Schlüssels haben und das Verfahren nie anständig beschrieben wurde) hat jeder der das hier zu knacken versucht schon verloren. Beim Mitlesen einer via One time pad verschlüsselten Nachricht weiß man nach dem Lesen genau so viel darüber was verschlüsselt wurde, wie man vorher wusste. Da könnte ich euch auch gleich sagen "Leute, ich habe einen Text verschlüsselt. Was war der Text?" (Den Ciphertext bekommt ihr von mir nicht; der würde euch wie schon gesagt ohnehin keine weiteren Informationen über den Inhalt der Nachricht geben (außer höchstens eine Abschätzung für deren Länge, wenn ich euch genau sage, wie das Verfahren zu implementieren ist)).
(Verschlüsselt habe ich selbstverständlich das Wort "Käsekuchen".)

Death~
28.02.2016, 16:20
Ich weiß die Art der Verschlüsselung ( Verschlüsselung mit Schlüsselwort, so lautet die Überschrift)
Hier wäre der Schlüssel Führerschein:


Klar
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


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




Die Verschlüsselung scheint wie folgt aufgebaut zu sein:

Schlüsselwort: FUEHRERSCHEIN

Man entfernt die doppelten Vorkommen von Zeichen und erhält: FUEHRSCIN

Diese 9 Zeichen setzt man nun in Relation mit den ersten 9 Zeichen des Alphabets.
Jetzt fängt man am Ende des Alphabets an und setzt die Fehlenden 17 Zeichen (ABC ohne FUEHRSCIN) in Relation mit dem Alphabet (z = A, y = B, ...)

Jetzt hat man jedem Buchstaben ein Zeichen zugeordnet.


Wenn man jetzt davon ausgeht, dass in der Zusatzaufgabe die gleiche Verschlüsselung verwendet wird, nur mit anderem Schlüsselwort, kann man das von mir beschriebene Verfahren anwenden, um die möglichen Wörter aus der Wordlist einzugrenzen. Dabei ist es ja völlig unerheblich ob die Wörter aus der Wordlist aus der deutschen oder klingonischen Sprache stammen.


Mhhh... Käsekuchen

Jones97
28.02.2016, 16:54
Die Verschlüsselung scheint wie folgt aufgebaut zu sein:

Schlüsselwort: FUEHRERSCHEIN

Man entfernt die doppelten Vorkommen von Zeichen und erhält: FUEHRSCIN

Diese 9 Zeichen setzt man nun in Relation mit den ersten 9 Zeichen des Alphabets.
Jetzt fängt man am Ende des Alphabets an und setzt die Fehlenden 17 Zeichen (ABC ohne FUEHRSCIN) in Relation mit dem Alphabet (z = A, y = B, ...)

Jetzt hat man jedem Buchstaben ein Zeichen zugeordnet.


Wenn man jetzt davon ausgeht, dass in der Zusatzaufgabe die gleiche Verschlüsselung verwendet wird, nur mit anderem Schlüsselwort, kann man das von mir beschriebene Verfahren anwenden, um die möglichen Wörter aus der Wordlist einzugrenzen. Dabei ist es ja völlig unerheblich ob die Wörter aus der Wordlist aus der deutschen oder klingonischen Sprache stammen.


Mhhh... Käsekuchen

Wie mir scheint, hast Death~ das Prinzip verstanden. Den nötigen Algorythmus habe ich bereits gschrieben, und meine Eingabe enthält nur Wörter der Länge des Verschöüsselten Wortes (19 Buchstaben) ich brauchte lediglich diese .split um meine eingabe der möglichen (deutsceh!!!) wörter in ihre Einzel Wörtern im Array speichern zu können. Leider ist mir nun nicht ganz klar was diese ("\\r?\\n") bedeutet. Zeilenumbruch ist in Java ja \n was bedeutet also der rest ?

hoschi111
28.02.2016, 17:24
Do you even google?

Mal wieder Zitat Stackoverflow:


All 3 of them represent the end of a line.
But...\r (Carriage Return) - moves the cursor to the beginning of the line without advancing to the next line
\n (Line Feed) - moves the cursor down to the next line without returning to the beginning of the line - *In a nix environment \n moves to the beginning of the line.
\r\n (End Of Line)- a combi of \r and \n

Cystasy
28.02.2016, 17:43
Wie mir scheint, hast Death~ das Prinzip verstanden. Den nötigen Algorythmus habe ich bereits gschrieben, und meine Eingabe enthält nur Wörter der Länge des Verschöüsselten Wortes (19 Buchstaben) ich brauchte lediglich diese .split um meine eingabe der möglichen (deutsceh!!!) wörter in ihre Einzel Wörtern im Array speichern zu können. Leider ist mir nun nicht ganz klar was diese ("\\r?\\n") bedeutet. Zeilenumbruch ist in Java ja \n was bedeutet also der rest ?

Es gibt zwei Arten von Zeilenumbrüchen..einmal \n und einmal \r - ("\\r?\\n") behandelt einfach diese beiden Fälle :P
hoschi hat das ganze ja schon genauer erklärt.

Jones97
29.02.2016, 16:07
Danke Threat kann hiermit geschlossen werden