Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
E
Enigma
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jan Schubert
Enigma
Commits
f03b01a8
Commit
f03b01a8
authored
5 years ago
by
Dennis Eisold
Browse files
Options
Downloads
Patches
Plain Diff
Unnötige Variablen und Funktionen raus gelöscht, Codierer dokumentiert
parent
6e7e6c92
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/main/java/projekt/enigma/model/Codierer.java
+93
-71
93 additions, 71 deletions
src/main/java/projekt/enigma/model/Codierer.java
with
93 additions
and
71 deletions
src/main/java/projekt/enigma/model/Codierer.java
+
93
−
71
View file @
f03b01a8
...
...
@@ -7,29 +7,49 @@ import java.util.Calendar;
import
java.util.Random
;
/**
* TODO: Dokumentieren
* Die Codierer Klasse beschreibt den Benutzer welcher die Enigma benutzt.
* Alle Vorgänge wie z.B. das zusammenbauen der Hardware, auslesen des Codebuches und das anschließende codieren,
* finden hier statt. Dieser ist quasi die Schnittstelle zwischen der GUI (Hauptmann welcher ihm sagt was er zu
* verschlüsseln hat), der Enigma und dem Funker im Funkraum, welcher die Nachricht im Anschluß versendet.
*/
public
class
Codierer
{
/**
*
TODO: Dokumentieren
*
Der Klartext Spruchschlüssel zur codierung der Nachricht
*/
private
String
spruchschluessel
;
/**
* Der Spruchschlüssel, mit den Tageswerten aus dem Codebuch, codiert
*/
private
String
spruchschluesselCodiert
;
private
String
kenngruppe
,
kenngruppeCodiert
;
/**
* Die Kenngruppe für die versendeten Nachrichten gedacht sind. Diese ist relevant für den Webservice (Funkraum)
*/
private
String
kenngruppe
;
/**
* Die Nachricht, welche der Benutzer eingibt, wird als String nachricht gespeichert
* und im laufe der Benutzung ergänzt
*/
private
String
nachricht
;
/**
* Das Hardware Objekt. Hier werden alle Hardware relevanten Baugruppen gespeichert und verarbeitet.
*/
private
Hardware
hardware
;
/**
* Im Codebuch sind die Tageswerte zu finden. Über dieses Objekt kann darauf zugegriffen werden.
*/
private
Codebuch
codebuch
;
/**
* TODO: Dokumentieren
* Der Konstruktor des Codierers
* Hier werden die globalen Variablen auf ihre Standart Werte gesetzt sowie die Objekte Initialisiert.
*/
public
Codierer
()
{
this
.
nachricht
=
""
;
this
.
spruchschluessel
=
""
;
this
.
spruchschluesselCodiert
=
""
;
this
.
kenngruppe
=
""
;
this
.
kenngruppeCodiert
=
""
;
this
.
codebuch
=
new
Codebuch
();
this
.
codebuch
.
fetchTagesschluessel
();
}
...
...
@@ -74,16 +94,15 @@ public class Codierer {
/**
* Hier wird ein neuer Spruchschlüssel generiert.
* <p>
* Mit diesem werden die Walzen auf eine neue Startposition gestellt und dem Kopf, mit dem
* Tagesschlüssel codiert, hinzugefügt.
* <
p
>
* <
br
>
* Hierfür wird mittels der Funktion "randomBuchstabe" ein zufälliger Buchstabe generiert,
* und geschaut ob dieser bereits in der globalen Variable this.spruchschluessel vorhanden ist.
* und geschaut ob dieser bereits in der globalen Variable
(
this.spruchschluessel
)
vorhanden ist.
* Wenn nicht, wird der Buchstabe dem Spruchschlüssel hinzugefügt.
* <
p
>
* <
br
>
* Dies wir nun so lange gemacht bis der Spruchschlüssel eine länge von drei Zeichen hat.
* <p>
* TODO: Doku aktuallisieren
*/
public
void
generateSpruchschluessel
()
{
...
...
@@ -104,21 +123,13 @@ public class Codierer {
this
.
hardware
.
setzePosition
(
1
,
this
.
spruchschluessel
.
charAt
(
1
));
this
.
hardware
.
setzePosition
(
2
,
this
.
spruchschluessel
.
charAt
(
2
));
// Die Kenngruppe codieren
this
.
kenngruppeCodiert
=
this
.
codiere
(
this
.
kenngruppe
,
true
);
// Die Kenngruppe codieren
und in der Nachricht speichern
this
.
codiere
(
this
.
kenngruppe
,
true
);
}
/**
* TODO: Dokumentieren
*
* @return String : Der codierte Spruchschlüssel
*/
public
String
getSpruchschluesselCodiert
()
{
return
this
.
spruchschluesselCodiert
;
}
/**
* TODO: Dokumentieren
* Der Spruchschlüssel wird, zur internen Verwendung, auch im Klartext gespeichert.
* Wir brauchen diesen dann zum codieren der eigentlichen Nachricht.
*
* @return String : Der klartext Spruchschlüssel
*/
...
...
@@ -127,14 +138,14 @@ public class Codierer {
}
/**
* TODO: Dokumentieren
* Erstellen des Nachrichten Kopfes.
* Hierfür wird die aktuelle Uhrzeit ausgelesen, die Länge der Nachricht sowie der, mit den
* Tagescodes codierte, Spruchschlüssel.
*/
private
String
generateKopf
()
{
Calendar
cal
=
Calendar
.
getInstance
();
// Uhrzeit an den Kopf hängen
// TODO: Da gab es doch noch eine besser Lösung für den Korrekturfaktor der Uhrzeit?
return
String
.
format
(
"%02d%02d"
,
cal
.
get
(
Calendar
.
HOUR
),
cal
.
get
(
Calendar
.
MINUTE
))
+
" "
+
// Zeichen Anzahl der Nachricht
...
...
@@ -142,9 +153,6 @@ public class Codierer {
// Spruchschlüssel anhängen
this
.
spruchschluesselCodiert
.
substring
(
0
,
3
)
+
" "
+
this
.
spruchschluesselCodiert
.
substring
(
3
,
6
)
+
" "
;
// Kenngruppe an das Ende setzen
//this.kenngruppeCodiert;
}
/**
...
...
@@ -191,7 +199,7 @@ public class Codierer {
StringBuilder
sb
=
new
StringBuilder
();
sb
.
append
(
nachricht
[
1
],
0
,
16
);
for
(
int
i
=
17
;
i
<=
nachricht
[
1
].
length
();)
{
for
(
int
i
=
17
;
i
<=
nachricht
[
1
].
length
();
)
{
if
((
i
+
5
)
<
nachricht
[
1
].
length
())
{
sb
.
append
(
nachricht
[
1
],
i
,
i
+
5
).
append
(
" "
);
i
+=
5
;
...
...
@@ -240,7 +248,7 @@ public class Codierer {
/**
* Gibt die aktuellen Buchstaben auf den Walzen zurück
*
* @return
* @return
char[] : Walzen Array mit der aktuellen Position
*/
public
char
[]
getWalzen
()
{
char
[]
walzen
=
new
char
[
3
];
...
...
@@ -252,19 +260,13 @@ public class Codierer {
}
/**
* Setzt ein neues Hardware Objekt
* Hier wird ein einzelner Buchstabe verschlüsselt.
* Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
* In der Regel ist dies der Fall.
*
* @param hardware : Hardware
*/
public
void
setHardware
(
Hardware
hardware
)
{
this
.
hardware
=
hardware
;
}
/**
* TODO: Dokumentieren
*
* @param buchstabe
* @return
* @param buchstabe : char : Der zu codierende Buchstabe
* @param save : boolean : Nachricht speichern oder nicht
* @return char : Der codierte Buchstabe
*/
public
char
codiere
(
char
buchstabe
,
boolean
save
)
{
char
codiert
=
this
.
hardware
.
codiere
(
buchstabe
);
...
...
@@ -276,11 +278,13 @@ public class Codierer {
}
/**
* TODO: Dokumentieren
* Codiert den Übergebenen String.
* Man muss hier ebenfalls mitgeben ob der codierte String in Codierer.nachricht gespeichert werden soll oder nicht.
* In der Regel ist dies der Fall.
*
* @param klartext
* @param save
* @return
* @param klartext
: String : Der zu codierende Text
* @param save
: boolean : Nachricht speichern oder nicht
* @return
String : Der codierte Text zusätzlich als Rückgabe
*/
public
String
codiere
(
String
klartext
,
boolean
save
)
{
...
...
@@ -294,7 +298,9 @@ public class Codierer {
}
/**
* TODO: Dokumentieren
* Diese Funktion erwartet als (codierteNachricht) eine korrekte Enigma Nachricht.
* Ihr muss auch der Tag der codierung mitgegeben werden. Dieser weiß dein Funker im Funkraum.
* In der Regel ist dies der Tag des Nachrichten empfangs.
*
* @param codierteNachricht : String : Enigma codierte Nachricht
* @param tag : int : Tag der Nachricht
...
...
@@ -332,12 +338,13 @@ public class Codierer {
}
/**
* TODO: Dokumentieren
* Zerlegt den übergebenen String in einen char Array und decodiert jedes Zeichen.
* Der String wird dann decodiert zurück gegeben.
*
* @param nachricht
* @return
* @param nachricht
: String : Der zu decodierende Text
* @return
String : Der decodierte Text
*/
p
ublic
String
decodiereString
(
String
nachricht
)
{
p
rivate
String
decodiereString
(
String
nachricht
)
{
StringBuilder
sb
=
new
StringBuilder
();
...
...
@@ -351,51 +358,66 @@ public class Codierer {
}
/**
*
TODO: Dokumentieren
*
Setzt die Enigma auf die Einstellungen des aktuellen Tages, aus dem Codebuch zurück.
*/
public
void
resetHardware
()
{
this
.
initialisiereHardware
();
}
/**
* Setzt d
ie Walze
auf der
Position
(w
a
lzenPosition)
in die Enigma ein.
*
Mit dem char (position) sagt man auf welchen Buchstaben sie eingestell
t werden
soll
.
* Setzt d
en anzuzeigenden Buchstaben (buchstabe)
auf der
Walze
(wl
a
zenPosition)
*
TODO: Wenn die Walzen, Notches, Kabel, etc. verändert werden, muss die bisherige Nachricht (this.nachricht) gelösch
t werden.
*
* @param walzenPosition
* @param
position
* @param walzenPosition
: int : Nummer der Walze
* @param
buchstabe : char : Buchstabe der zugewiesen soll
*/
public
void
setWalze
(
int
walzenPosition
,
char
position
)
{
this
.
hardware
.
setzePosition
(
walzenPosition
,
position
);
public
void
setWalze
(
int
walzenPosition
,
char
buchstabe
)
{
this
.
hardware
.
setzePosition
(
walzenPosition
,
buchstabe
);
}
/**
*
TODO: Dokumentieren
*
Setzt den Ring auf der Walze auf einen neuen Umstprungwert.
*
* @param walzenPosition
* @param
position
* @param walzenPosition
: int : Walze auf die der Ring gesteckt wird
* @param
umsprungPunkt : int : Buchstabe auf dem der Notch sitzt
*/
public
void
setRing
(
int
walzenPosition
,
int
position
)
{
this
.
hardware
.
setzeRing
(
walzenPosition
,
position
);
public
void
setRing
(
int
walzenPosition
,
int
umsprungPunkt
)
{
this
.
hardware
.
setzeRing
(
walzenPosition
,
umsprungPunkt
);
}
/**
* TODO: Dokumentieren
* Setzt die Walze (walzeNr) in die Position (walzenPosition) der Enigma ein.
* Mit (ringstellung) gibt man die Position des Umsprungpunktes an.
*
* @param walzenPosition
* @param walzeNr
* @param walzenPosition : int : Position der Walze in der Enigma (1-2-3)
* @param walzeNr : int : Nummer der Walze die eingesetzt wird
* @param ringstellung : int : Stellung des Ringes
*/
public
void
setWalzeNr
(
int
walzenPosition
,
int
walzeNr
)
{
this
.
hardware
.
setzeWalzenNr
(
walzenPosition
,
walzeNr
,
1
);
public
void
setWalzeNr
(
int
walzenPosition
,
int
walzeNr
,
int
ringstellung
)
{
this
.
hardware
.
setzeWalzenNr
(
walzenPosition
,
walzeNr
,
ringstellung
);
}
/**
*
TODO: Dokumentieren
*
Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu.
*
* @param feldNr
* @param verbindung
* @param feldNr
: int : Kabel Nummer welches am Steckbrett eingesteckt wird
* @param verbindung
: String : Verbindung welche die vertauschten Buchstaben angibt
*/
public
void
setSteckbrett
(
int
feldNr
,
String
verbindung
)
{
this
.
hardware
.
getSteckbrett
().
setzeVertauschung
(
verbindung
.
charAt
(
0
),
verbindung
.
charAt
(
1
));
}
/**
* Prüft ob der Port auf den das Kabel gesteckt werden soll, noch frei ist.
* <p>
* TODO: Prüfen ob im aktuellen Feld bereits zwei Buchstaben stehen, wenn ja, nach erfolg dieser Funktion,
* setSteckbrett ausführen mit beiden Buchstaben als String
*
* @param buchstabe : char : Der zuletzt eingegebene Buchstabe
* @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurückgegeben, ansonsten false
*/
public
boolean
pruefeSteckbrettPort
(
char
buchstabe
)
{
return
true
;
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment