Autor Beitrag
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 02.11.02 14:52 
Hi!

MathiasSimmack hat folgendes geschrieben:
Logischerweise musst du das wieder rückgängig machen, wenn ein Buchstabe entfernt wird:

Stimmt, habe ich aber auch schon geschrieben:
Peter Lustig hat folgendes geschrieben:
Ach ja, muss beim Backspace auch die Walze zurückgedreht werden? Wenn ja, dann sollte das eigentlich wie das Vorspulen gehen.


MathiasSimmack hat folgendes geschrieben:
Man benötigt bloß die Positionsvariable, die man entsprechend anpasst, und kann sich das "copy" und "delete" an der Walze sparen:
Ja, stimmt. War auch der erste Ansatz, warum wir den verworfen haben, weiß ich jetzt im nachhinein auch nicht mehr. Aber mit Copy und Paste erinnert so'n bisschen an die Walzendrehung.

DOP3 F!$H @MathiasSimmack hat folgendes geschrieben:
und dann kommst du und machst es schlecht

Nein, er macht es nicht schlecht, sondern zeigt Alternativen auf. Die sollten jedem immer willkommen sein. Und "schlecht machen" ist auch nur ein anderer Ausdruck für "Kritik üben" und Kritik sollte auch immer willkommen sein. Durch Kritik lernen wir.


Aber jetzt habe ich nochmal eine Frage: Wenn ich die Walze habe, wie Du sie hier programmierst und ich drücke als ersten Buchstaben 'A' bekomme ich ein 'Q'. Wenn ich als ersten Buchstaben 'B' drücke, bekomme ich auch ein 'Q'. Das ist doch aber nicht richtig, oder? Selbst wenn Du nicht dekodieren willst.

MfG,
Peter[/quote]

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.11.02 15:22 
Hi!

Ich weiss, dass MathiasSimmack mir helfen wollte bzw. hilft. Aber so wie er es geschrieben hat war es nicht gut, denn

1. Ich hatte ja schon vorher (irgendwann) geschrieben, das ich gar nicht dekodieren will.
2. Und ich fange bei meinen Programmen immer einfach an und baue sie dann aus. Daher ist klar, dass die Enigma mit einer Walze eine "Zeichensalatmaschine" ist, die eine Kette von 26 aneinander gereihten Buchstaben erzeugt.

Zu
Peter Lustig hat folgendes geschrieben:
Aber jetzt habe ich nochmal eine Frage: Wenn ich die Walze habe, wie Du sie hier programmierst und ich drücke als ersten Buchstaben 'A' bekomme ich ein 'Q'. Wenn ich als ersten Buchstaben 'B' drücke, bekomme ich auch ein 'Q'. Das ist doch aber nicht richtig, oder?
ist zu sagen
WIEDER MAL MEIN FEHLER,
denn ich habe die neuste Version meines Programms nicht gepostet.
Dort funktioniert die Verschlüsselung einwandfrei (nur "Löschen" klappt nicht). Nimmst du das Programm von MathiasSimmack dann klappt alles (DANKE! Ich werde es ein bisschen umbauen für mich)

Also, wenn ich mit der einwalzigen Enigma zufrieden bin, poste ich sie hier rein:
VERSPROCHEN!

Doch ich habe schon wieder eine Frage:

Es gibt so ComboBoxen (glaub ich jedenfalls, dass die ComboBox das ist, was ich brauche :wink: ). Ich meine ein Kästchen wo etwas steht, z.B. "Hallo". Neben dem Kästchen ist ein Pfeil (das Kästchen sieht so aus wie das "Gehe zu: [Forum]"-Feld ganz unten auf der Seite) und klicke ich da drauf, so kann ich andere Sachen auswählen, wie "Tach" oder "Tschüss".

Nun zu meiner Frage :D :
Wie kann ich so ein Kästchen anlegen (mit mehreren Auswahlmöglichkeiten)?

Das soll nämlich dazu dienen, die Walze vor dem Kodieren manuell zu verstellen (siehe www-ivs.cs.uni-magde...nigma_bedienung.html ).

Doch bei so einem Kästchen wieder die Frage, was mache ich, wenn der User erst die Walze manuell einstellt, dann beginnt zu kodieren und dann nochmal die Walze manuell einstellt. (Bei der richtigen Enigma würde das niemand machen, weil er dann ja auch übermittlen müsste, an welcher Stelle den Nachricht er die Walzenstellung geändert hat) Das müsste irgendwie verhindert werden (Sperren des Kästchens nach Beginn des Kodierens ... oder so :wink: )


Zuletzt bearbeitet von D0P3 F!$H am Mi 06.11.02 17:28, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 02.11.02 15:46 
Hi!

Das mit der ComboBox ist nicht schwer. Wenn Du die auf der Arbeitsfläche hast, dann hast Du Im Object Inspector die Eigenschaft Items. Dort kannst Du dann in jeder Zeile eine Auswahlmöglichkeit eingeben. Über ComboBox1.Items[i] kannst Du dann während der Laufzeit auf die Einträge zugreifen, ItemIndex gibt Dir die Nummer des Eintrags, der gerade ausgewählt ist.
Um die ComboBox zu sperren, setzt Du ganz einfach ComboBox1.Enabled auf "false", um sie wieder zu aktivieren auf "true".

DOP3 F!$H hat folgendes geschrieben:
Nimmst du das Programm von MathiasSimmack dann klappt alles

Auch Mathias' Programm kodiert jeden ersten Buchstaben mit Q, egal um welchen Buchstaben es sich handelt. Oder habe ich mich da jetzt verguckt?

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.11.02 18:05 
So, jetzt muss ich doch mal einschreiten. Ich möchte nämlich nicht als Buhmann hingestellt werden. Zumindest nicht hier in diesem Thread ...
Peter Lustig hat folgendes geschrieben:
Nein, er macht es nicht schlecht, sondern zeigt Alternativen auf.

Peter hat´s klar erkannt. Aber jetzt ausführlich:

Zitat:
Muss mir mal dein Programm ansehen, ob ich das verstehe uns so.

Ich habe euren (deinen und Peters) Ansatz mit der Position ja gelesen. Meiner Meinung nach ist das blanke Hochsetzen bzw. Verringern der Position innerhalb der Walze weitaus schneller und effizienter als das Umkopieren der Buchstaben.
Aus dem Grund -und nur aus dem Grund!- habe ich diesen Ansatz mal verfolgt und bin auf meinen Lösungsweg gekommen.

Zitat:
-Ich kann das Programmieren nicht so gut wie "richtige" Programmierer

Das verlangt auch keiner. Ich habe auch noch diverse Schwächen. Ich würde mich auch nicht als "richtigen" Programmierer bezeichnen wollen, da ich´s nicht beruflich mache ...

Zitat:
Ich fange mit einfaches Sachen an und arbeite mich dann zu Schwierigerem vor (mehr walzen, eventuell Steckbrett, Ring und Reflektor)

Das ist der richtige Weg. Zumindest machst du dir ja selbst einen Kopf. Es gibt auch Leute, die wollen den Code fertig haben, ohne nachdenken zu müssen.

Zitat:
Ich hatte nie vor und habe im Moment auch nicht vor, den Text wieder zu dekodieren (steht auch weiter oben in diesem Topic)

Das habe ich gelesen! Ich hab´s auch verstanden!

Zitat:
... und dann kommst du und machst es schlecht

Das ist gar nicht wahr!

Zitat:
(wahrscheinlich ohne alles hier geschriebene zu lesen ...)!

Ich habe eine lokale Kopie des Threads gemacht und in aller Ruhe gelesen und versucht, das ganze nachzuvollziehen. Erst danach habe ich gepostet! Nur, und da wirst du mir sicher zustimmen: den zum Teil fehlerhaften Quellcode der ersten Postings habe ich gar nicht erst berücksichtigt. Stattdessen habe ich mich gleich auf die letzten Varianten "gestürzt". Aber das betrifft nicht den Text in den Postings. Das habe ich alles gelesen.

Dass du das für die Schule schreiben musst, dass du viele Themen noch gar nicht behandelt hast, ... das interessiert mich in dem Moment nicht. Es ist mir egal, ob du ein Anfänger oder ein Profi bist. Ich hätte bei jedem das selbe gesagt, der diesen Ansatz vorgelegt hätte:
Es gibt IMHO keine Möglichkeit zur Dekodierung, weil der Ausgangsstring immer identisch ist, unabhängig von der Eingabe:
ausblenden Quelltext
1:
2:
3:
4:
5:
Mathias Simmack
QWERTZU IOPASDF

Peter Lustig
QWERT ZUIOPA

Du siehst, dass der kodierte Text immer der selbe ist. Das ist eine ganz sachliche Kritik an der Methode! Nicht an dir als Person! Da ich mir die ENIGMA-Beschreibung durchgelesen habe, stelle ich mir die Sache (vereinfacht!) so vor:

Jeder Buchstabe hat ein eigenes Gegenstück. Ich mach´s mir mal wirklich einfach und sage: A entspricht B, B entspricht C, C entspricht D, usw. Klar soweit? Okay, nach dem Tippen wird die Walze um eine Position gedreht. Das heißt, neben dem eigentlich echten Gegenstück käme noch die Walzenposition dazu. Aus dem A wird so meinetwegen ein C, aus dem B ein D, usw. Überträgt man dieses simple System mal auf die beiden o.g. Namen, dann ergibt sich folgendes:
ausblenden Quelltext
1:
2:
3:
4:
5:
Mathias Simmack
NCWLNGZ ARWXMPY

Peter Lustig
QGWIW RBACSR

Hier hast du zwei unterschiedlich kodierte Texte als Ausgang, und damit hast du logischerweise auch einen Ansatzpunkt für eine Entschlüsselung. Und du kannst auch die o.g. Behauptung schön nachvollziehen, s. mein Name:
ausblenden Quelltext
1:
2:
3:
M = N // (Buchstabe + 1) + 0 (Walzenposition)
A = C // (Buchstabe + 1) + 1 (Walzenposition)
T = W // (Buchstabe + 1) + 2 (Walzenposition)

usw.

Die Entschlüsselung ist in dem Fall sogar recht simpel. Wir hatten hier bei AUQ.de schon einmal eine monoalfabetische Verschlüsselung (erinnerst du dich, Peter? :wink:); und die selbe Basis ließe sich am PC auch hierbei nutzen. Die Walze würde in meinem Beispiel ja so aussehen:
ausblenden Quelltext
1:
BCDEFGHIJKLMNOPQRSTUVWXYZA					

Du suchst also das N und findest es an Position #13. Ist dir die ASCII-Tabelle ein Begriff? Jedes Zeichen wird durch einen ASCII-Wert repräsentiert. Und das Alfabet ist in dieser Tabelle so geordnet, wie du es kennst: A, B, C, usw. Du nimmst also die Position des gefundenen Buchstaben und addierst 64 hinzu.
Das Beispiel N: wie gesagt, es steht an Position 13. 13 + 64 ist 77. Und 77 ist der ASCII-Code des M:
ausblenden Quelltext
1:
ShowMessage(CHR(13 + 64));					

8)
Jetzt käme das C (kodiertes A). C steht an Position #2, würde also eigentlich dem B entsprechen. Aber wir müssen ja noch die Walzenposition berücksichtigen. Also, Eins weniger = A, ... usw. Du müsstest also am Ende wieder meinen Namen lesen können.

Nun macht das bei meiner o.g. Walze nicht viel Sinn, da die wirklich sehr simpel ist. Aber du könntest ja zum Verschlüsseln auch diesen String nutzen:
ausblenden Quelltext
1:
QAYWSXEDCRFVTGBZHNUJMIKOLP					

(Das wäre der Codeschlüssel von der schon erwähnten monoalfabetischen Verschlüsselung, die wir hier schon mal besprochen hatten.)

Das Ergebnis würde anders aussehen (und evtl. schwerer zu deuten sein), aber das Prinzip ist das selbe. Du könntest also jeden Tag eine neue "Walze" (= einen neuen String) benutzen, müsstest am Code selbst nichts weiter ändern. Und das kommt der Original-ENIGMA schon ziemlich nahe, da dort ja auch Tagescodes usw. benutzt wurden.

Das Problem gegenüber der ENIGMA wäre wohl die Sache mit der Walzendrehung an sich. Wenn ich die Doku richtig verstanden habe, dann gab´s dort auch ein Muster. So ist der Buchstabe A beim ersten Mal C, beim zweiten Mal A, beim dritten Mal F, usw. Und nach 26 Durchläufen wäre man wieder beim Anfang (A = C).
Bei meinem Walzen-String ist es eben so, dass die Walzenposition um Eins erhöht wird und damit die Basis für das nächsten Zeichen bildet:
ausblenden Quelltext
1:
2:
3:
4:
A = B
A = C
A = D
...

bis man nach 26 Durchläufen ebenfalls wieder am Ausgangspunkt angekommen ist. So ein Muster ist natürlich ebenfalls leichter zu durchschauen als Schleifkontakte auf einer Walze. Ich denke aber, dass das für deine schulischen Zwecke keine große Rolle spielen dürfte. Ansonsten müsste man zu jeder Walze noch eine Liste mit Sprungzielen definieren. Etwa:
ausblenden Quelltext
1:
2:
const
  jumps = array[1..26]of byte = (2,0,5,...);

usw. Anstelle die Variable mit der Position zur Berechnung des Buchstabens heranzuziehen, benutzt du sie um aus der Liste den jeweils nächsten Sprungpunkt herauszulesen. Und der dient dann zur Ermittlung des nächsten Buchstabens.

Aber du kannst die Entschlüsslung auch noch anderweitig erschweren. Dazu setzt du die Ausgangsposition der Walze einfach hoch. Normalerweise fängst du ja bei Null an. Machen wir´s doch mal mit Position 10. Dann würde Peters Name -kodiert nach meiner Simpelwalze!- so aussehen:
ausblenden Quelltext
1:
2:
Peter Lustig
AQGSG BLKMCB

Lässt sich auch nachvollziehen:
ausblenden Quelltext
1:
2:
P = A // (Buchstabe + 1) + 10 (Walzenposition)
...

Gut, was? :wink:

So, damit hast du jetzt eine recht einfache einwalzige ENIGMA als Grundlage für deine Hausaufgaben.
Anhand dieser Theorie müsstest du die Verschlüsselung problemlos hinbekommen. Und wenn du die hast, kriegst du die Dekodierung auch hin und kannst deinen Lehrer richtig verblüffen.

Bin ich nun ein böser Kerl, oder was?
:)
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.11.02 18:06 
Peter Lustig hat folgendes geschrieben:
Auch Mathias' Programm kodiert jeden ersten Buchstaben mit Q, egal um welchen Buchstaben es sich handelt. Oder habe ich mich da jetzt verguckt?

Stimmt. Aber die neue Variante habe ich ja soeben theoretisch gepostet. :D
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 02.11.02 18:31 
MathiasSimmack hat folgendes geschrieben:
Meiner Meinung nach ist das blanke Hochsetzen bzw. Verringern der Position innerhalb der Walze weitaus schneller und effizienter als das Umkopieren der Buchstaben.
Wo Du recht hast, hast Du recht!

MathiasSimmack hat folgendes geschrieben:
Wir hatten hier bei AUQ.de schon einmal eine monoalfabetische Verschlüsselung (erinnerst du dich, Peter?

Ja, ich erinnere mich. Irgendwie scheinen in letzter Zeit 'ne Menge Verschlüsselungsverfahren programmiert zu werden. Monoalphabetisch, Enigma und irgendwo habe ich auch schon einen Beitrag über Public-Key gesehen. (Obwohl der Autor von Private-Key sprach, aber das glaube ich ihm nicht. Besonders weil er sehr große Integers braucht.)

MathiasSimmack hat folgendes geschrieben:
Jetzt käme das C (kodiertes A). C steht an Position #2, würde also eigentlich dem B entsprechen. Aber wir müssen ja noch die Walzenposition berücksichtigen. Also, Eins weniger = A, ... usw. Du müsstest also am Ende wieder meinen Namen lesen können.
Die Methode finde ich prima!

MathiasSimmack hat folgendes geschrieben:
Bin ich nun ein böser Kerl, oder was?
Der Teufel in Person! :wink:

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 02.11.02 22:50 
Hallo!

:!: Auch ich muss jetzt erst mal einiges richtig stellen! :!:

1. Ich weiss, dass ich überreagiert habe:
D0P3 F!$H hat folgendes geschrieben:
Ich weiss, dass MathiasSimmack mir helfen wollte bzw. hilft.

Hätte ich nicht gemerkt, das du mir helfen willst, hätte ich das hier nicht geschrieben:
D0P3 F!$H hat folgendes geschrieben:
Muss mir mal dein Programm ansehen, ob ich das verstehe uns so.


2. Aber so wie das hier steht
Zitat:
Aber jetzt lese ich mir erst mal die Erklärungen zur echten ENIGMA durch, denn -sorry!- in dem Code von D0P3 F!$H sehe ich keinen Ansatz für eine Dekodierung. Insofern ist das für mich bestenfalls eine "Zeichensalatmaschine".
, hörte sich das für mich so an, als ob mein Programm für dich nur "Müll" wäre, weil ich keine Dekodierung eingebaut hätte bzw. nicht einbauen könnte.

3. Doch zu
Zitat:
Ich habe euren (deinen und Peters) Ansatz mit der Position ja gelesen. Meiner Meinung nach ist das blanke Hochsetzen bzw. Verringern der Position innerhalb der Walze weitaus schneller und effizienter als das Umkopieren der Buchstaben.
kann ich nur sagen, dass ich erstmal mit einem sehr einfach gestrickten Programm anfange und dieses dann "entschlacke" - wenn es denn funktioniert. Danach versuche ich es zu verkürzen, indem ich komplizierte Befehle nehme. Beispielsweise wird PosWalze := PosWalze +1; durch Inc(PosWalze); ersetzt.

4. Mir ist es schon öfters in deisem Forum passiert, dass ich angemacht wurde, weil ich so einfach gestrickte Programme verwende. Deshalb habe ich auf deinen Kommentar "Zeichensalatmaschine" mit
D0P3 F!$H hat folgendes geschrieben:
Ich kann das Programmieren nicht so gut wie "richtige" Programmierer
reagiert, weil ... siehe 2.Punkt.

5. Zu
Zitat:
D0P3 F!$H hat folgendes geschrieben:
Ich hatte nie vor und habe im Moment auch nicht vor, den Text wieder zu dekodieren (steht auch weiter oben in diesem Topic)
Das habe ich gelesen! Ich hab´s auch verstanden!
ist zu sagen, dass du
Zitat:
Aber jetzt lese ich mir erst mal die Erklärungen zur echten ENIGMA durch, denn -sorry!- in dem Code von D0P3 F!$H sehe ich keinen Ansatz für eine Dekodierung.
besser hättest schreiben können, müssen oder sollen. Dann wäre das alles nicht geschehen.
Aber zu so etwas gehören nun mal zwei Leute:
Du, weil du dich vielleicht nicht so geschickt bzw. nicht richtig ausgedrückt hast, wie du das wolltest oder solltest, damit ich deinen Kommentar richtig verstehe und ihn nicht ihn falschen Hals bekomme (was ja passiert ist!)
UND
Ich, weil ich deinen Kommentar nur einmal gelesen habe und nicht gründlich genug oder gar nicht "zwischen den Zeilen" gelesen habe, um ihn so zu verstehen, wie du das meintest oder meinen wolltest

6. Ich glaube dir ja!
Zitat:
D0P3 F!$H hat folgendes geschrieben:
... und dann kommst du und machst es schlecht
Das ist gar nicht wahr!
D0P3 F!$H hat folgendes geschrieben:
(wahrscheinlich ohne alles hier geschriebene zu lesen ...)!
Ich habe eine lokale Kopie des Threads gemacht und in aller Ruhe gelesen und versucht, das ganze nachzuvollziehen. Erst danach habe ich gepostet!

ICH HABE ES VERSTANDEN UND ENTSCHULDIGE MICH BEI DIR!
!!! SORRY @ MathiasSimmack @ SORRY !!!


7. Aber hier
Zitat:
Nur, und da wirst du mir sicher zustimmen: den zum Teil fehlerhaften Quellcode der ersten Postings habe ich gar nicht erst berücksichtigt.
muss ich dir wiedersprechen. OK, Der Quellcode ist fehlerhaft, aber wie soll ich ihn den korrekt hinkriegen, wenn ich die Befehle nicht kenne bzw. nicht weiss, wie ich die Befehle benutzen soll? Die Delphi-Hilfe - auch wenn es die deutsche ist - ist kaum eine Hilfe! Und alles was wir nicht im Unterricht hatten - der Unterricht hat mir bei der Enigma übrigens nichts gebracht - oder was ich noch aus Turbo Pascal weiss - da ist schon noch einiges, was mir bei diesem Programm geholfen hat (Danke, Herr Unger, das war das einzig Gute, was ich bei Ihnen jemals gelernt habe) - muss ich mir mühsam selbst beibringen oder in diesem Forum erklärt bekommen (An dieser Stelle in GROSSES DANKE an euch beide) .

8. Wenn ich noch eines zu deinem Programm anmerken dürfte: #13,#10,#32: cText := cText + Key; ist falsch, denn dadurch bekommt man keinen Zeilensprung. Den bekommt man so: #13 : cText := cText + #13#10; und nicht so, wie in deinem Programm (BITTE nicht in falschen Hals bekommen).
@ Peter Lustig: Hast du das mit #10 dir angeguckt und verstanden? Mein Vater hat mir das erklärt. Bei einer Schreibmaschine musste man für ein "Enter" erst an den Anfang der momentanen Zeile gehen (#10 = linefeed) und dann in die nächste Zeile springen (#13 = carriage return). Beim Computer geht das durch die Taste "Enter" in einem Schritt, aber im Programm muss es anscheinend mit zwei sein! Alles klar? Ich denke doch schon, oder? :wink:


Nun das war erstmal genug des Redens.
Oder ist noch etwas nicht ausdiskutiert?


Ich denke nun ist alles geklärt und ich kann mich auf deinen letzten Beitrag "stürzen".

Tja, du hast - meiner Meinung nach - das Verschlüsselungsprinzip der Enigma nicht verstanden, obwohl das Beispiel hier RICHTIG ist (Nicht in den falschen Hals bekommen) ! Aber du hast mir mit deinem Statement
Zitat:
ausblenden Quelltext
1:
2:
3:
4:
5:
Mathias Simmack 
QWERTZU IOPASDF 

Peter Lustig 
QWERT ZUIOPA
Du siehst, dass der kodierte Text immer der selbe ist.
einen schweren Fehler in meinem (eigentlich deinem, nur etwas umgeschrieben) Programm gezeigt (DANKE!) , obwohl dein Quellcodeauszug hier RICHTIG ist! Den Fehler habe ich natürlich sofort behoben.

Mein Enigma-Programm hat ja nur eine Walze. Aber eine "echte" Eingma mit nur einer Walze - selbst mit Steckbrett, Ring und Reflektor - bringt überhaupt nichts, da zu leicht zu knacken. Ich will das verdeutlichen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
Hallo ihr da draussen {Klartext}

Q W E R T Z U I O P A S D F G H J K L Y X C V B N M {Buchstabenanordnung auf der 1.Walze}
QNWTEBRHTPZVUDIJORPXATSLDMFZGAHGJOKULCYIXOCWVEBKNSMY {Gesamter Walzenstring}
 N T B H P V D J R X T L M Z A G O U C I Q W E K S Y {Verknüpfte Buchstaben, z.B.: 'Q' ist mit 'N', 'W' mit 'T' und 'E' mit 'B' verknüpft}

NTBHP VDJ RX TLMZAGOU {Kodierte Nachricht}


Abcde fgh ij klmnopqr {Klartext}

Q W E R T Z U I O P A S D F G H J K L Y X C V B N M {Buchstabenanordnung auf der 1.Walze}
QNWTEBRHTPZVUDIJORPXATSLDMFZGAHGJOKULCYIXOCWVEBKNSMY {Gesamter Walzenstring}
 N T B H P V D J R X T L M Z A G O U C I Q W E K S Y {Verknüpfte Buchstaben, z.B.: 'Q' ist mit 'N', 'W' mit 'T' und 'E' mit 'B' verknüpft}

NTBHP VDJ RX TLMZAGOU {Kodierte Nachricht}


Du kannst sehen, dass gleich verschlüsselt wird - egal was man eingibt. Aber so funktioniert die Enigma nun mal (deine "selbstgebaute" Enigma verschlüsselt falsch - jedenfalls wenn man das Enigma-Prinzip als richtig ansieht).

Bei mehreren Walzen funktioniert die Enigma so:
Eingegebener Buchstabe -> "Oberster" Buchstabe der 1.Walze ('Q') und sein verknüpfter Partner der 1.Walze ('N') -> Buchstabe, der 2.Walze der parallel (auf gleicher Walzenposition) steht, wird gesucht -> Z.B.: 'F' und sein verknüpfter Partner der 2.Walze ('R') -> Buchstabe, der 3.Walze der parallel (auf gleicher Walzenposition) steht, wird gesucht -> Z.B.: 'A' und sein verknüpfter Partner der 3.Walze ('M') -> Kodierter Buchstabe 'M' 8)

Nach jedem eingegebenen Buchstaben dreht sich die 1. Walze um einen Buchstaben weiter. Nach 26 Eingaben (eine Umdrehung der 1.Walze) dreht sich die 2.Walze um einen Buchstaben weiter. Nach 260 - müsste stimmen - Eingaben (eine Umdrehung der 2.Walze) dreht sich die 3.Walze um einen Buchstaben weiter.


Zur Dekodierung kann ich nichts sagen, weil ich mich damit nicht beschäftigt habe. Aber es kann gut sein, dass dein Verfahren stimmt, wenn es nicht von deiner "selbstgebauten" Enigma abhängig ist - denn die verschlüsselt falsch, wenn man das Enigma-Prinzip als richtig ansieht.


Von
Zitat:
Die Entschlüsselung ist in dem Fall sogar recht simpel. Wir hatten hier bei AUQ.de schon einmal eine monoalfabetische Verschlüsselung
komme ich nicht mehr ganz mit (habe auch ehrlich gesagt keine Lust, weil ich ja nicht dekodieren will)


Zitat:
Bin ich nun ein böser Kerl, oder was?

Im Moment nicht! Nein, Scherz geh weg ... Ernst kommt näher ...

Ich kann mich ja nochmal entschuldigen.
ES TUT MIR LEID!
(Auch Erdferkel - das bin ich - haben Rechte, oder?)


Hier kommt noch mein Enigma-Programm mit einer Walze. Es funktioniert eigentlich perfekt - wenn ich mir das erlauben darf - bis auf das Hinabscrollen der kodierten Nachricht. *heul*

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
const
 Walze1 : String  = 'QNWTEBRHTPZVUDIJORPXATSLDMFZGAHGJOKULCYIXQCWVEBKNSMY';

var
 Form1 : TForm1;
 PosWalze1 : Integer = 2;
 KodierterText : String  = '';

implementation
{$R *.dfm}

procedure TForm1.KlartextKeyPress(Sender : TObject; var GedrueckteTaste : Char);
begin
 if (GedrueckteTaste in ['a'..'z', 'A'..'Z', #13, #32, #8]) then begin
  if (GedrueckteTaste in ['a'..'z']) then GedrueckteTaste := UpCase(GedrueckteTaste);
  case GedrueckteTaste of
   #8 : if (KodierterText <> '') then begin
         Delete(KodierterText, Length(KodierterText), 1);
         if (PosWalze1 = 2) then PosWalze1 := Length(Walze1)
         else Dec(PosWalze1, 2);
        end;
   #13 : KodierterText := KodierterText + #13#10;
   #32 : KodierterText := KodierterText + GedrueckteTaste;
   'A'..'Z' : begin
               KodierterText := KodierterText + Walze1[PosWalze1];
               if (PosWalze1 = Length(Walze1)) then PosWalze1 := 2
               else Inc(PosWalze1, 2);
              end;
  end;
  Kodierung.Text := KodierterText;
 end
 else GedrueckteTaste := #0;
end;

end.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.11.02 09:04 
D0P3 F!$H hat folgendes geschrieben:
Ich weiss, dass ich überreagiert habe

Ja, stimmt. :wink:

Zitat:
Aber so wie das hier steht ..., hörte sich das für mich so an, als ob mein Programm für dich nur "Müll" wäre, weil ich keine Dekodierung eingebaut hätte bzw. nicht einbauen könnte.

:roll: Ich habe doch gesagt: das hätte ich zu jedem gesagt. Wäre Peter gekommen und hätte das Prinzip vorgelegt, hätte er den Satz zu hören bekommen, weil ich keinen Ansatz für eine Dekodierung gesehen habe. Ich sag´s schon wieder: es ging also gar nicht gegen dich als Person, sondern gegen die Idee der Kodierung. Und -oh Wunder!-
Zitat:
Aber du hast mir mit deinem Statement einen schweren Fehler in meinem Programm gezeigt.

Also hast du doch selbst gemerkt, dass da was nicht stimmte. Ich sehe da also nichts, worüber man sich aufregen müsste.

Zitat:
7. Aber hier
Zitat:
Nur, und da wirst du mir sicher zustimmen: den zum Teil fehlerhaften Quellcode der ersten Postings habe ich gar nicht erst berücksichtigt.
muss ich dir wiedersprechen. OK, Der Quellcode ist fehlerhaft, aber wie soll ich ihn den korrekt hinkriegen, wenn ich die Befehle nicht kenne bzw. nicht weiss, wie ich die Befehle benutzen soll?

Du darfst die Kommentare nicht aus dem Zusammenhang reißen. Ich will damit sagen, dass ich mir den Thread gestern auf die Platte kopiert und mich dann mit dem Thema beschäftigt habe. Zu dem Zeitpunkt gab es bereits Lösungen bzw. Änderungen auf eure (deine und Peters) erste Code-Postings. Wozu hätte ich die also noch nehmen sollen, wenn es aktuellere Codes gab?
Ich weiß jetzt also nicht so richtig, warum du dich von dem Satz nun wieder "angemacht" fühlst? Wäre nicht passiert, wenn du ihn in dem Kontext gelassen hättest, in den er gehört. :)

Zitat:
Doch zu ... kann ich nur sagen, dass ich erstmal mit einem sehr einfach gestrickten Programm anfange und dieses dann "entschlacke" - wenn es denn funktioniert. Danach versuche ich es zu verkürzen, indem ich komplizierte Befehle nehme.

Ich habe bereits gestern gesagt, dass nichts dagegen einzuwenden ist und dass du -im Gegensatz zu anderen- ja wenigstens noch selbst denken möchtest.

Zitat:
Tja, du hast - meiner Meinung nach - das Verschlüsselungsprinzip der Enigma nicht verstanden, obwohl das Beispiel hier RICHTIG ist (Nicht in den falschen Hals bekommen)!

Ich weiß nicht, was du mit meinem Hals hast ... :wink: ...

Woher hast du die Anordnung der Walzen? Ich habe dazu nämlich nichts gefunden. :cry: Dann hätte ich von Anfang an das richtige Prinzip benutzen können. So musste ich mir (mangels Kenntnis über die Zugehörigkeit der Buchstaben) eben ein eigenes Prinzip ausdenken.
Nicht, dass ich das nicht auch erwähnt hätte, dass es ein selbst ausgedachtes Prinzip ist ... *hi hi* ... Ist ja egal.

So, nun gucke ich mir mal deine Umsetzung der ENIGMA in aller Ruhe an.

< ------------- >

OT: Wenn ich dir einen offenen Rat geben darf - Lies bitte Kommentare, Kritik und dergleichen von einer etwas höheren Warte aus. Will sagen: betrachte sachliche Kritik an einem Programm nicht gleich als Kritik an dir selbst. Zum einen hat jeder mal angefangen, und ich sagte doch: mir persönlich ist es egal, ob du ein Anfänger oder ein Profi bist.
Das Forum ist dazu da, über Lösungen bzw. deren Ansätze zu diskutieren. Wenn ich allerdings nun jeden Satz auf die Goldwaage legen müsste, nur weil du zu schnell und ungerechtfertigt beleidigt reagierst, dann ist es keine Diskussion, die mir Spaß macht, weil ich mich für Sachen rechtfertigen muss, die mir unterstellt wurden, die ich aber überhaupt nicht gemeint habe.

So, jetzt habe ich eine Kritik an den Mods: Das Thema hat eigentlich nur am Rande mit Komponenten zu tun. Eigentlich gehört es deshalb wieder in die ObjektPascal-Sparte. :wink:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.11.02 11:08 
So, jetzt wieder on-topic:

Ich brauche jetzt mal von dir, D0P3 F!$H, eine kurze Beschreibung, wie du auf den kodierten Text gekommen bist:
ausblenden Quelltext
1:
2:
Hallo ihr da draussen
NTBHP VDJ RX TLMZAGOU

Wenn ich mir das ansehe, dann handelt es sich beim kodierten Text um die Partnerbuchstaben, die du in der zweiten Zeile angegeben hast:
ausblenden Quelltext
1:
2:
Q W E R T Z U I O P A S D F G H J K L Y X C V B N M
N T B H P V D J R X T L M Z A G O U C I Q W E K S Y

Richtig? Wenn ja, dann -glaube ich- liegt genau dort dein Denkfehler. Wenn du den Partnerbuchstaben heranziehst, dann wäre das beim H das G und nicht das N; denn das N gehört zum Q! Du hast nichts weiter gemacht, als der Reihe nach und von Anfang an (!) die Partnerbuchstaben aufzuzählen, und deshalb ergeben bei dir:
ausblenden Quelltext
1:
2:
Hallo ihr da draussen
Abcde fgh ij klmnopqr

den selben kodierten Text. Dabei hast du aber nicht die tatsächlichen Buchstaben berücksichtigt, die eingetippt wurden! Führt man den Gedanken zu Ende, dann kommt man zu dem Schluss: es spielt absolut keine Rolle, was man eingibt, das Ergebnis ist immer der String
ausblenden Quelltext
1:
NTBHPVDJRXTLMZAGOUCIQWEKSY					

(mit oder ohne Leerzeichen an verschiedenen Positionen), der sich nach 26 Buchstaben wiederholt. Es gibt deshalb auch keinen Ansatzpunkt für eine Dekodierung. Die Entschlüsselung solcher Nachrichten hätte selbst die Nazis vor eine unlösbare Aufgabe gestellt. Das ist nicht böse gemeint, D0P3 F!$H, also sei nicht sauer deswegen: aber dein Programm arbeitet exakt so, wie ich es eben kurz beschrieben habe.

Ich zeige dir die Sache, wie ich sie sehe. Aber ich will dafür am Anfang mal die Walzendrehung vernachlässigen! Also, sagen wir einfach mal: die Walze ist kaputt oder hängt fest. Jedenfalls dreht sie sich nicht mit. Dann ergäbe sich, ausgehend von den o.g. Partnerbuchstaben IMHO die folgende Kodiersequenz:
ausblenden Quelltext
1:
2:
3:
4:
5:
Hallo ihr da draussen
GTCCR JGH MT MHTDLLBS

Abcde fgh ij klmnopqr
TKWMB ZAG JO UCYSRXNH

(Ich denke, so macht das mehr Sinn.)

So, nun ließe sich diese "kaputte" ENIGMA aber leicht knacken (Häufigkeitsanalyse der Buchstaben, usw.), da es ja zu jedem Buchstaben immer das selbe Gegenstück (den selben Partner gibt). Also kommt noch die Walzendrehung! Das bedeutet aber: du darfst auf keinen Fall die Originalbuchstaben (Q, W, E, ...) sondern nur die Partner (N, T, B, ...) um eine Stelle verschieben. Und wenn ich jetzt nicht völlig danebenliege, dann ergibt sich mit meinem Programm folgende Kodierung:
ausblenden Quelltext
1:
2:
Hallo ihr da draussen
GLQWM MWT QI EAEIYNCG

Lässt sich ja auch nachweisen. Das H wird -wie schon gesagt!- mit seinem Partner G kodiert. -klick- Walzendrehung. Das A hätte normalerweise das T zum Partner, durch die eben erfolgte Drehung ist es aber nun das L. -klick- Das L (aus "Hallo"!) hat normalerweise das C zum Partner, weil sich die Walze aber insgesamt zweimal gedreht hat, ist der neue Partner das Q, usw.


Als Tipp -
Für eine Umsetzung im Programm empfehle ich dir zwei Strings. Einer enthält das Tastaturlayout in der Form QWERTZ, der zweite enthält die dazu passenden Partnerbuchstaben.
Im "KeyPress" des Memos prüfst du nun -wie gehabt!- ob es ein Buchstabe im Bereich von A bis Z ist. Diesen Buchstaben suchst du im Tastaturlayout-String. Die Position entspricht dabei dem Partnerbuchstaben im zweiten String. Allerdings hast du hier dann noch die Walzendrehung zu berücksichtigen.

Das ist machbar, denn "meine" einwalzige ENIGMA kodiert inzwischen. :wink:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 03.11.02 12:18 
So, jetzt bin ich auch wieder da. Mein Rechner brauchte gestern ganz dringend ein neues OS.

Mathias hat folgendes geschrieben:
Du hast nichts weiter gemacht, als der Reihe nach und von Anfang an (!) die Partnerbuchstaben aufzuzählen,...
Im Grunde genommen das gleiche wie vorher nur mit den anderen Buchstaben.

Ich glaube auch, das Deine Methode richtig ist. Wenn man sich auf der Internetseite über die Enigma die Walzenkonstruktion ansieht, erkennt man auch, dass es so, wie DOP3 F!$H bisher macht, nicht stimmen kann. Aber auf mich hört ja keiner! :crying:

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.11.02 16:21 
Mal unabhängig von Richtig oder Falsch habe ich einen wirklich schwerwiegenden Fehler gefunden. Wenn wir uns einig sind, dass jeder Buchstabe seinen eigenen Partner hat, und dass dieser Partner offensichtlich nur einmal vorkommen darf - was fällt uns hierbei auf:
ausblenden Quelltext
1:
2:
3:
4:
const
  Keyboard : string[26] = 'QWERTZUIOPASDFGHJKLYXCVBNM';
  Walze1   : string[26] = 'NTBHPVDJRXTLMZAGOUCIQWEKSY';
                            ^        ^

Es gibt kein F im unteren String, dafür zwei T. Da brauche ich mich ja nicht wundern, dass längere Texte falsch dekodiert werden. Mich würde jetzt interessieren an welche Stelle das F hingehört, dann funktioniert die Routine bei mir problemlos.

Ich habe nämlich ausprobiert:
ausblenden Quelltext
1:
2:
JEU CDMUCT RQGTQSN TSUCPOZ
ICH HEISSY MATHIAS SIMMACK

:( Ich habe spaßeshalber das F mal anstelle des ersten T geschrieben, und siehe da:
ausblenden Quelltext
1:
JEU CDMUCT RQGFQSN FSUCPOZ					

Da weiß die ENIGMA dann wie ich heiße. :)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 03.11.02 16:32 
Hi!

Naja, so schlimm ist der Fehler nun doch nicht. Wahrscheinlich hat sich DOP3 F!$H nur vertippt. Und an welche Stelle das F kommt, ist eigentlich egal. Der Schlüssel ist ja sowieso austauschbar.

Man könnte doch eigentlich sogar eine Routine schreiben, die einem einen zufällig generierten Schlüssel ausgibt. Ich glaube, eine Thread zur Permutation hatten wir auch schon mal in AUQ. Allerdings muss der Schlüssel natürlich irgendwo abgespeichert werden, sonst könnte das mit der Entschlüsselung etwas knifflig werden.

Obwohl es eigentlich interessant wäre, eine "richtige" Enigma zu programmieren und dann mal zu sehen, wie lange ein heutiger PC braucht, um den Code zu knacken, für den die Engländer immer mehrere Tage brauchten.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.11.02 19:11 
Hm, wenn ich das historische Vorbild nachprogrammieren möchte, dann muss ich die Buchstabenanordnung auf der Walze schon wissen. Ansonsten: ja, so schwerwiegend ist es sicher nicht.

Ich schau mir mal die anderen Links bei dieser Doku an. Mal seh´n, ob man irgendwo eine richtige Aufstellung findet. Möglich, dass durch diese Schleifkontakte auf den Walzen ja vollkommen unterschiedliche Kombinationen für jeden Buchstaben zustande kommen. Evtl. reicht ein Verschieben der Position nicht. Aber das ist doch mal was ... :wink: ... auf jeden Fall besser als der x-te MP3-Renamer.

Obwohl - ein MP3-Renamer mit Wehrmachtsverschlüsselung. :twisted:
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 03.11.02 19:31 
Moin! (Ohhh ... 17.00 Uhr ... da habe ich wohl zu lange durchgemacht :beer: )

Um dieser Diskussion ein Ende zu machen:

Ich weiss, dass es mein Fehler war und entschuldige mich dafür bei dir, MathiasSimmack!
Entschuldigung angenommen? Sag bitte JA! :cry:

Aber ich habe auch nur so reagiert, weil ich in diesem Forum schon öfters wegen meiner einfachen Programmstruktur "angemacht" wurde - wie oben schon erwähnt. (Ich kann es einfach nicht lassen, was? :oops: ) *schämt sich ganz dolle*

<----- THE END ----->


So ... jetzt zu deinem letzten Posting.

MathiasSimmack hat folgendes geschrieben:
Ich zeige dir die Sache, wie ich sie sehe.

Peter Lustig hat folgendes geschrieben:
Ich glaube auch, das Deine Methode richtig ist. Wenn man sich auf der Internetseite über die Enigma die Walzenkonstruktion ansieht, erkennt man auch, dass es so, wie DOP3 F!$H bisher macht, nicht stimmen kann.


:crying: Als ich diese Statements gelesen habe wollte ich nicht glauben, dass ihr beide das Prinzip nicht verstehen wolltet.
Also habe ich nochmal auf der Enigma-Seite nachgeguckt ... und siehe da
ihr habt Recht !

Jetzt habe ich das auch begiffen. (Hoffe ich jedenfalls, bis ich von euch eines besseren belehrt werde :D )

MathiasSammack hat folgendes geschrieben:
Ich brauche jetzt mal von dir, D0P3 F!$H, eine kurze Beschreibung, wie du auf den kodierten Text gekommen bist:

Weil ich das Prinzip jetzt verstanden zu haben glaube, lasse ich mal die Beschreibung, okay? :wink:

Ob deine Eingma richtig funktioniert weiss ich nicht, weil ich ihre Funktionsweise nicht verstanden habe. (Auch nach mehrmaligem Lesen und ausgiebigem Studieren stellte sich leider kein Erfolg ein) :wink:

Aber ich habe natürlich keine Kosten und Mühen gescheut, um meine Enigma auf den richtigen Stand zu bringen und anderweitig zu verbessern. *Hühnerbrust schwillt ganz dolle an* 8)

<----- THE END ----->


>>> VERBESSERUNGEN AN MEINER ENIGMA <<<

1. Ich habe die Enigma auf die richtige Verschlüsselung umgestellt. (Obwohl mein Lehrer das wahrscheinlich eh nicht bemerken würde bzw. er hat gesagt, dass ich einfach nur ein Verschlüsselungsprogramm bauen solle)

2.
MathiasSammack hat folgendes geschrieben:
Als Tipp -
Für eine Umsetzung im Programm empfehle ich dir zwei Strings. Einer enthält das Tastaturlayout in der Form QWERTZ, der zweite enthält die dazu passenden Partnerbuchstaben.

Ich habe es bei einem String belassen. Das geht auch und ist meiner Meinung nach dadurch nicht komplizierter geworden (Ich werde in diesem Glauben weiterleben bis ihr mein Programm "zerplfückt" habt)

3. Ich habe einige Fehler behoben, die noch im Programm waren, wenn die 'Löschen'-Taste gedrückt wurde. Ihr könnt ruhig zugeben, dass ihr diese Fehler drin gelassen habt, um mich zu prüfen? Ich weiss das! *stolziert herum und lacht ganz dolle dreckig* 8)

<----- THE END ----->


@ Peter Lustig

Hast du das jetzt mit #13#10 verstanden? (Erklärung weiter oben)


Wie kann ich hier mein Programm zum Download hinstellen? Dann könntet ihr euch die Verschlüsselung mal ansehen.
Aber ich poste zur Sicherheit meinen Quellcode hier hin, damit ihr nicht zu heulen anfangt, weil ihr nichts zum Amüsieren habt! :twisted:

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
const
 Walze1 : String  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZQWERTZUIOPASDFGHJKLYXCVBNM';

 var
 Form1 : TForm1;
 DrehungenWalze1 : Integer = 0;
 PositionWalze1 : Integer = 1;
 KodierterText : String  = '';

implementation
{$R *.dfm}

procedure TForm1.KlartextKeyPress(Sender : TObject; var GedrueckteTaste : Char);
begin
 if (GedrueckteTaste in ['a'..'z', 'A'..'Z', #8, #13, #32]) then begin
  if (GedrueckteTaste in ['a'..'z']) then GedrueckteTaste := UpCase(GedrueckteTaste);
  { Ist die gedrückte Taste 'a'..'z', wird sie zum entsprechenden Großbuchstaben }
     { #129ü #132ä #142Ä #148ö #153Ö #154Ü }
  case GedrueckteTaste of
   #8 : if not (KodierterText = '') then begin
         case KodierterText[Length(KodierterText)] of
          #10 : Delete(KodierterText, Length(KodierterText) - 1, 2);
          { Ist das letzte Zeichen im kodierten Text #10 (Zeilenanfang), werden im kodierten Text die letzten beiden Zeichen (#13 und #10) gelöscht }
          #32 : Delete(KodierterText, Length(KodierterText), 1);
          { Ist das letzte Zeichen im kodierten Text 'Leertaste', wird im kodierten Text das letzte Zeichen gelöscht }
          'A'..'Z' : begin
                      Delete(KodierterText, Length(KodierterText), 1);
                      { Ist das letzte Zeichen im kodierten Text 'A'..'Z', wird im kodierten Text das letzte Zeichen gelöscht }
                      if (DrehungenWalze1 = 0) then DrehungenWalze1 := 25
                      else Dec(DrehungenWalze1);
                      { Ist die Walze in der 1. Position, fängt sie in der letzten Position an; ansonsten dreht sie sich eine Position zurück }
                     end;
         end;
        end;
   #13 : KodierterText := KodierterText + #13#10;
   { Ist die gedrückte Taste 'Enter', wird der kodierte Text mit #13 (Beginn der nächsten Zeile) und #10 (Zeilenanfang) erweitert }
   #32 : KodierterText := KodierterText + ' ';
   { Ist die gedrückte Taste 'Leertaste', wird der kodierte Text mit einer Leerstelle erweitert }
   'A'..'Z' : begin
               PositionWalze1 := (Ord(GedrueckteTaste) - 64) + DrehungenWalze1;
               { Der 'oberste' Buchstabe der Walze ergibt sich aus der Buchstabenposition im Alphabet + der Anzahl der Walzendrehnungen }
               if (PositionWalze1 > 26) then Dec(PositionWalze1, 26);
               { Ist der 'oberste' Buchstabenwert der Walze größer als eine Walzenumdrehung, wird eine Walzenumdrehung abgezogen }
               KodierterText := KodierterText + Walze1[26 + PositionWalze1];
               { Der kodierte Text wird um den Buchstaben erweitert, mit dem der 'oberste' Buchstabe der Walze verknüpft ist }
               if (DrehungenWalze1 = 25) then DrehungenWalze1 := 0
               else Inc(DrehungenWalze1);
               { Ist die Walze in der letzten Position, fängt sie wieder in der 1. Position an; ansonsten dreht sie sich eine Position weiter }
              end;
  end;

  Kodierung.Text := KodierterText;
  { Der kodierte Text wird im Ausgabefeld ausgegeben }

  with Kodierung do begin
   SelStart := Length(Kodierung.Text);
   { Der markierte Textteil im Ausgabefeld wird ans Ende des kodierten Textes gesetzt }
   SendMessage(Kodierung.Handle, EM_Scrollcaret, 0, 0);
   { Das Ausgabefeld bekommt den Befehl, soweit zu scrollen, bis der Cursor im Bild ist }
  end;

 end
 else GedrueckteTaste := #0;
 { Ist die gedrückte Taste nicht 'a'..'z', 'A'..'Z', 'Enter', 'Leerstaste' oder 'Löschen', wird sie nicht angezeigt }
end;

end.


P.S.: Ich habe auch probiert die Buchstaben 'ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü' einzubinden. Dies sollte aber so geschehen:
'ä', 'Ä' : Im Eingabefeld werden 'AE' geschrieben und beide Buchstaben werden verschlüsselt
'ö', 'Ö' : Im Eingabefeld werden 'OE' geschrieben und beide Buchstaben werden verschlüsselt
'ü', 'Ü' : Im Eingabefeld werden 'UE' geschrieben und beide Buchstaben werden verschlüsselt

Doch das habe ich nicht hinbekommen, weil ja
ausblenden Quelltext
1:
procedure TForm1.KlartextKeyPress(Sender : TObject; var GedrueckteTaste : Char);					

GedrückteTaste ein Char ist und kein String. Dadurch wird das Verschlüsseln von 'ä', 'Ä', 'ö', 'Ö', 'ü', 'Ü' ziemlich kompliziert. Habe ich Recht? :wink:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 03.11.02 19:31 
Mathias hat folgendes geschrieben:
Hm, wenn ich das historische Vorbild nachprogrammieren möchte, dann muss ich die Buchstabenanordnung auf der Walze schon wissen.
Achja, es wurde ja nicht die Kombination geändert, sondern die Walzenstellung. :oops: Ansonsten wäre dieser gesamte Thread ziemlich sinnlos.

Mathias hat folgendes geschrieben:
Obwohl - ein MP3-Renamer mit Wehrmachtsverschlüsselung.

:mrgreen: :mrgreen: :mrgreen: :mrgreen: (Habe in Java mal den RSA-Algorithmus nachprogrammiert. Soll ich den für Delphi umbauen? Wäre doch auch ganz nett!)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 03.11.02 20:26 
Hi!


Also erstmal vorweg, damit das geklärt ist: ja, das mit #13#10 habe ich verstanden.

So, nun zu Deinem Programm: Ich habe mir den Code noch nicht im Detail angeschaut, aber bisher sieht es so aus, als hättest Du Deine kleine Privatenigma fertig. Fehlt nur noch eine MP3-Sammlung, die Du damit bedrohen kannst. :lol:

Aber wie gesagt, ich habe mir das Programm noch nicht im Detail angeschaut.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 03.11.02 21:05 
Zitat:
Also erstmal vorweg, damit das geklärt ist: ja, das mit #13#10 habe ich verstanden.

:D Freut mich! (wurde aber auch mal langsam Zeit!) :D

Zitat:
Ich habe mir den Code noch nicht im Detail angeschaut, aber bisher sieht es so aus, als hättest Du Deine kleine Privatenigma fertig

Nehmen wir mal an, dass der Quellcode in Ordnung sei. Dann kommt nun bald die 2. Walze ... UND viel viel später vielleicht eventuell mal schauen ... die 3. Walze

Ich habe mal wieder ein paar Fragen:
1. Wie kann ich hier ins Forum Datein uploaden?
2. Wie kann ich eine 'GroupBox' durchsichtig machen? Ich will nämlich die 'GroupBox' als "Rahmen" um jedes Memofeld machen. Aber wenn ich eine 'GroupBox' erstelle und das Programm starte, dann verdeckt sie das Memofeld.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 03.11.02 21:56 
DOP3 F!$H hat folgendes geschrieben:
Freut mich! (wurde aber auch mal langsam Zeit!)
:schmoll:

DOP§ FI!$H hat folgendes geschrieben:
Dann kommt nun bald die 2. Walze ... UND viel viel später vielleicht eventuell mal schauen ... die 3. Walze

Das ist doch jetzt aber kein Problem mehr. Wenn Du die Walzenstrings und die Walzendrehungen etc. in einem Array speicherst, kannst Du problemlos so viele Walzen einbauen wie Du willst. Du baust die Verschlüsselung einfach in eine Schleife.

DOP3 F!$H hat folgendes geschrieben:
Wie kann ich hier ins Forum Datein uploaden?
Geht, glaube ich, nicht. Du musst die Daten auf einen anderen Server laden und kannst dann die URL angeben.

Groupbox: du markierst die Groupbox und benutzt dann im Edit-Menü den Befehl "Send to Back". Das sollte helfen.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 03.11.02 22:00 
Ich habe da noch ein paar Fragen!

1. Gibt es eine Möglichkeit quasi Images in ein z.B. Array zu packen?

2. Kann man irgendwie Label setzen, um z.B. mit einem Button das Programm neu zu starten (falls es dafür nicht einen ähnlichen Befehl gibt wie 'Close();') ?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 03.11.02 22:57 
Hi!

Images: es gab in AUQ schon 'ne Menge Threads, in denen beschrieben wird, wir man Komponenten in Arrays verwaltet. Das geht bestimmt auch mit TImage.

Zu dem Problem mit dem Neustarten des Programmes fällt mir im Moment nichts ein. Ich werde mal drüber nachdenken und vielleicht hat ja auch Mathias eine Idee.

MfG,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".