Autor Beitrag
Sven
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: Sa 09.11.02 10:27 
@MathiasSimmack
Das mit der 4er-Blöcken sieht schon gut aus. Vielleicht kannst Du aber noch hinzufügen, wenn der letzte Block nicht 4 Buchstaben lang ist, daß dieser dann aufgefüllt wird. Zum Beispiel mit der entsprechenden Anzahl von "X"en.

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.11.02 19:11 
So ... habe mal fleissig weitergebastelt!


Verbesserungen an meinem Programm und Fragen dazu:

1.
MathiasSammack hat folgendes geschrieben:
Ich hab´s mir einfach gemacht: um eine if-Anweisung beim Kodieren/Dekodieren zu sparen, habe ich folgenden Typ und folgende Variable deklariert: usw...
Einfacher hattest du das nicht? :wink: ... Naja ist ja auch nur halb so schlimm ... Denn ich habe es so gemacht und es funktioniert prima (bisher): :D
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
implementation
{$R *.dfm}

function Verschluesselung(Buchstabe: Char): Char;
begin
 PositionWalze1 := (Ord(Buchstabe) - 64) + DrehungenWalze1;
 if (PositionWalze1 >= 27) then Dec(PositionWalze1, 26);
 Result := Walze1[PositionWalze1];
 if (DrehungenWalze1 >= 26) then DrehungenWalze1 := 1
 else Inc(DrehungenWalze1);
end;
...
{in der Prozedur TForm1.Memo1KeyPress wird der kodierte Text um den kodierten Buchstaben aus der function erweitert}
KodierterText := KodierterText + Verschluesselung(GedrueckteTaste, Walze1);

Ich habe den Fehler, weshalb die Funktion gestern nicht funktionieren wollte gefunden. Ich brauche den Befehl Result in der Funktion, da dieser das Ergebnis der Funktion liefert, richtig? 8)

2. Ich habe weitere Fehler im Programm behoben, die bei der Verschlüsselung und beim Löschen einzelner Buchstaben auftraten.

3. Wird das Programm gestartet, so sind alle Komponenten sichtbar und editierbar. Aber sobald man einen Buchstaben ins Eingabfeld getippt hat, werden die ComboBoxen auf "ComboBoxX.Enabled := False;" gesetzt.
@ Peter: THX 4 HELP! (s. letztes Topic, S. 2)

4. Mathias du hast bei deinem Programm ja einen "Reset"-Button. Steckt dahinter eine Prozedur, die die Memos leert und die restlichen Komponenten auf "Enabled:= True;" und "Enabled:= False;" setzt, oder steckt dahinter ein Befehl der das Programm (irgendwie) neustartet? Sollte es letzteres sein, poste mal bitte diesen Befehl und eine Erklärung zur Funktionsweise. Danke!
Zum "Neustarten" habe ich in der Delphi-Hilfe folgendes gefunden:
a) Befehl "Reset": Habe ich ausprobiert, aber nicht hinbekommen, da zu schwierig :cry:
b) Befehle "Label" und "GoTo": Habe ich ausprobiert und auch verstanden, funktionieren aber nicht; Klingt aber vielversprechend (BITTE mal anschauen, ob ihr das hinbekommt! :wink: )

5.
MathiasSammack hat folgendes geschrieben:
STOP!

Wir müssen uns -glaube ich!- erst mal darüber einig werden, was wir hier als ENIGMA bezeichnen.

:bawling: Heisst das, meine "Enigma" funktioniert falsch - wenn "richtig" das Prinzip der echten Enigma bzw. des Java-Applets ist?
Also in Bezug auf die Verschlüsselung glaube ich, liegts du falsch (siehe Punkt 6). :P
Wenn du die Dekodierung meinst, so muss ich dir leider zustimmen. Denn da versagt mein Programm auf voller Linie - wenn meine folgende Erklärung denn zutrifft!
Wenn ich einen Text verschlüsseln will, nehme ich z.B. WalzeX und PositionY. Beim Dekodieren
stelle ich die Enigma wieder so ein, wie bei der Verschlüsselung (WalzeX und PositionY). Dann tippe ich die kodierte Nachricht ein und erhalte den Klartext, richtig?

Sollte das stimmen, müsste mein Programm irgendetwas falsch machen. Oder sehe ich das "falsch"? :wink:

6.
MathiasSammack hat folgendes geschrieben:
Wolltest du das wissen?

Eigentlich nicht. Ich meinte: du stellst dein Programm (es hat doch 3 Walzen, oder) auf meine gepostete Einstellung ein. Dann tippst du den Klartext ein und postest die kodierte Nachricht, damit ich überprüfen kann, ob meine Enigma (wenn ich 3 Walzen eingabaut habe) auch richtig funktioniert (Dein Programm funktioniert doch wie die echte Enigma bzw. das Java-Applet, oder?).
:D Aber zu deiner Rettung, da hast mir geholfen. Denn mein Programm bekommt dasselbe raus wie deines.

P.S. @ Mathias: Wenn du mir deine E-Mail-Adresse gibst, kann ich dir die neuste Version meines Programms schicken. Die kannst dann in den Download "enigma+dopefish.exe" stellen.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.11.02 21:25 
D0P3 F!$H hat folgendes geschrieben:
Einfacher hattest du das nicht?

Einfacher wäre es mit if-then, aber so ist´s effizienter, weil sich das Programm die Prüfung sparen kann. Die Variable "ECFunc" zeigt ja auf die richtige Funktion. :)

Zitat:
Ich brauche den Befehl Result in der Funktion, da dieser das Ergebnis der Funktion liefert, richtig?

Yupp.

Zitat:
Steckt dahinter eine Prozedur, die die Memos leert und die restlichen Komponenten auf "Enabled:= True;" und "Enabled:= False;" setzt?

Ja. Ein Reset-Kommando ist mir auch nicht bekannt. Ich schreibe in solchen Fällen eine eigene Funktion (wie z.B. einen Button-Klick), in der alles zurückgestellt wird.

Zitat:
Heisst das, meine "Enigma" funktioniert falsch - wenn "richtig" das Prinzip der echten Enigma bzw. des Java-Applets ist?

Ich denke mal, dass das Applet die richtige Grundlage ist. Du simulierst das Prinzip nur.

Zitat:
Also in Bezug auf die Verschlüsselung glaube ich, liegts du falsch (siehe Punkt 6).

Das glaube ich nicht. Sonst würde mein Programm andere Ergebnisse liefern als das Java-Applet mit gleicher Einstellung.

Zitat:
Wenn ich einen Text verschlüsseln will, nehme ich z.B. WalzeX und PositionY. Beim Dekodieren stelle ich die Enigma wieder so ein, wie bei der Verschlüsselung (WalzeX und PositionY).

Genau! So funktioniert die Enigma!

Zitat:
Sollte das stimmen, müsste mein Programm irgendetwas falsch machen.

Wahrscheinlich liegt es an deiner Walzeneinstellung und evtl. auch am fehlenden Reflektor ->

Zitat:
du stellst dein Programm (es hat doch 3 Walzen, oder) auf meine gepostete Einstellung ein.

Das kann ich aber nicht, weil die erste und dritte Walzeneinstellung, die du mir vorschlägst, nicht existieren. Ich denke, die hast du dir selbst ausgedacht, bzw. falsch aus den numerischen Werten meines Postings umgesetzt. Das ist dir wahrscheinlich in den ganzen Postings entgangen: ich habe die Vermutung geäußert, dass die Anordnung der Buchstaben keineswegs so zufällig ist, wie es den Anschein hat.
Die erste Buchstabenfolge von dir entspricht der Einstellung deines Programms und ist einfach nur die Tastatur, bei Q beginnend und dann zeilenweise nach rechts durch bis zum M.
Die zweite Buchstabenfolge entspricht einer Walze der Enigma. Die dritte allerdings nicht mehr.

Die Änderung der Walzen wird also das Ergebnis verfälschen; es sei denn, du benutzt in deinem Programm die Einstellungen, die du aus meinen Postings bzw. aus dem Sourcecode des Applets entnehmen kannst. Dann können wir das Experiment gern noch einmal wiederholen. :)
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 10.11.02 18:18 
MathiasSimmack hat folgendes geschrieben:
Ich denke mal, dass das Applet die richtige Grundlage ist. Du simulierst das Prinzip nur.
Was heisst da simulieren? Meinst da damit, mein Programm verschlüsselt falsch (geht ja eigentlich nicht, da ich denselben Code rauskriege wie du :roll: ) oder die Funktinonsweise der Verschlüsselung ist nicht richtig. Heisst: Mein Programm verschlüsselt bei einer Walze "aus Versehen" oder durch Zufall richtig, aber bei zwei oder mehreren Walzen würde mein Programm falsch verschlüsseln. Meinst du das?


MathiasSimmack hat folgendes geschrieben:
Das glaube ich nicht. Sonst würde mein Programm andere Ergebnisse liefern als das Java-Applet mit gleicher Einstellung.
... Also irgendetwas läuft hier falsch ... und ich glaube, dass ich das bin :wink: ! Zusammenfassung:
1. Ich hatte dich gebeten dein Programm (auf siehe letzte Seite) einzustellen und den Code zu posten.
2. Du hast aber in meinem Programm den Text eingegeben und eben jenen Code gepostet. Richtig?
-> Falls ja, dann ist es ein Fehler meinerseits, denn ich hatte verstanden, du hättest dein Programm auf eine Walze reduziert und dann den Text eingegeben. Dann kannst du auch den voherigen Absatz vergessen! :oops:
-> Falls nein, dann hast du dein Programm auf eine Walze reduziert, den Text eingegeben und den Code gepostet. Doch dann muss mein Programm richtig verschlüsseln!


MathiasSimmack hat folgendes geschrieben:
Genau! So funktioniert die Enigma!
Okay, solltest du den letzten Abschnitt mit JA beantwortet habe, dann schau dir mal meinen Quellcode an und hilf mir bitte bei der Fehlersuche!
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:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
var
 Form1 : TForm1;
 DrehungenWalze1 : Integer = 0;
 i, j : Integer;
 PositionWalze1 : Integer = 1;
 Walze1Auswahl :  String = 'QWERTZUIOPASDFGHJKLYXCVBNM
                           EKMFLGDQVZNTOWYHXUSPAIBRCJ
                           AJDKSIRUXBLHWTMCQGZNPYFVOE
                           BDFHJLCPRTXVZNYEIWGAKMUSQO
                           ESOVPZJAYQUIRHXLNFTGKDCMWB
                           VZBRGITYUPSDNHLXAWMJQOFECK
                           JPGVOUMFYQBENHZRDKASXLICTW
                           NZJHGRCXMYSWBOUFAIVLPEKQDT
                           FKQHTLXOCBJSPDZRAMEWNIUYGV';
 KodierterText : String  = '';
 Walze1 : String  = 'QWERTZUIOPASDFGHJKLYXCVBNM';

implementation
{$R *.dfm}

function Verschluesselung(Buchstabe: Char; WalzeX: String): Char;
begin
 PositionWalze1 := (Ord(Buchstabe) - 64) + DrehungenWalze1;
 { Der 'oberste' Buchstabe der Walze ergibt sich aus der Buchstabenposition im Alphabet + der Anzahl der Walzendrehnungen }
 if (PositionWalze1 >= 27) then Dec(PositionWalze1, 26);
 { Ist die Walzenposition des verschlüsselnden Buchstaben größer als die Walze, wird die Position um eine Walzenlänge gekürzt }
 Result := WalzeX[PositionWalze1];
 if (DrehungenWalze1 >= 26) then DrehungenWalze1 := 1
 else Inc(DrehungenWalze1);
 { Ist die Walze in der letzten Position, fängt sie in der 1. Position an; ansonsten dreht sie sich eine Position weiter }
end;

procedure TForm1.KlartextKeyPress(Sender : TObject; var GedrueckteTaste : Char);
begin
 if (GedrueckteTaste in ['a'..'z', 'A'..'Z', #8, #13, #32]) then begin
  if (KodierterText = '') then begin
   AuswahlWalze1.Enabled := false;
   BeginnWalze1.Enabled := false;
  end;
  GedrueckteTaste := UpCase(GedrueckteTaste);
  { Ist die gedrückte Taste 'a'..'z', wird sie zum entsprechenden Großbuchstaben }
  case GedrueckteTaste of
   'A'..'Z' : begin
               KodierterText := KodierterText + Verschluesselung(GedrueckteTaste, Walze1);
               { Der kodierte Text wird um den verschlüsselten Buchstaben erweitert }
              end;
   #8 : if not (KodierterText = '') then begin
         case KodierterText[Length(KodierterText)] of
          '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 := 26
                      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;
          #10 : Delete(KodierterText, Length(KodierterText) - 1, 2);
          { Ist das letzte Zeichen im kodierten Text '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 }
         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 }
  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 mit dem markierten Textteil im Bild ist }
  end;

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

procedure TForm1.BeginnWalze1Change(Sender: TObject);
begin
 Insert(Copy(Walze1, 1, BeginnWalze1.ItemIndex), Walze1, Length(Walze1) + 1);
 { Der Walzenteil, der vor dem Anfangsbuchstaben liegt, wird ans Ende der Walze kopiert }
 Delete(Walze1, 1, BeginnWalze1.ItemIndex);
 { Der Walzenteil, der vor dem Anfangsbuchstaben liegt, wird gelöscht }
end;

procedure TForm1.AuswahlWalze1Change(Sender: TObject);
begin
 for i := 1 to 26 do Walze1[i] := Walze1Auswahl[i + 26 * AuswahlWalze1.ItemIndex];
 { Aus allen verfügbaren Walzen wird die Ausgewählte in den String Walze1 kopiert }
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Klartext.Text := '';
 Kodierung.Text := '';
end;

end.



MathiasSimmack hat folgendes geschrieben:
Wahrscheinlich liegt es an deiner Walzeneinstellung und evtl. auch am fehlenden Reflektor ->
Wenn du mit "Walzeneinstellung" 'qwertz...' meinst, dann ist das insofern falsch, als das es doch egal ist, welche Walzeneinstellung ich nehme, wenn nur das Prinzip der Enigma dahinter steht (Ausser, du möchtest eine historisch korrekte Enigma programmieren). Sollte allerdings das Enigmaprinzip bei meinem Programm nicht vorhanden sein, so hast du natürlich recht, denn dann arbeitet mein Programm nicht richtig.
Und am fehlenden Reflektor kann es auch nicht liegen (auch wieder nur, wenn nur das Prinzip der Enigma dahinter steht), denn es gab auch Enigmas ohne Reflektor.
Oder meinst das anders? :wink:


MathiasSimmack hat folgendes geschrieben:
Das ist dir wahrscheinlich in den ganzen Postings entgangen: ich habe die Vermutung geäußert, dass die Anordnung der Buchstaben keineswegs so zufällig ist, wie es den Anschein hat.
Ich meine, dass die Anordnung der Buchstaben egal ist, solange nur das Verschlüsselungsprinzip der Enigma dahinter steckt.
MathiasSimmack hat folgendes geschrieben:
Die Änderung der Walzen wird also das Ergebnis verfälschen
Ich denke nicht, weil siehe oben. Aber du kannst gerne probieren mich umzustimmen! :P


MathiasSimmack hat folgendes geschrieben:
es sei denn, du benutzt in deinem Programm die Einstellungen, die du aus ... dem Sourcecode des Applets entnehmen kannst.
Das Applet habe ich mir schon heruntergeladen, aber wie kann ich den Code angucken? Dazu brauche ich Java, oder nicht? Woher kriege ich das?


Peter Lustig hat folgendes geschrieben:
Den Rest überlasse ich Mathias, ich gehe jetzt mal nur auf das Array of TImage ein:
Ich würde das ja gerne ausprobieren und vom Link, wo das Array of TImage erklärt ist, habe ich den Quellcode auch ausprobiert und er funktioniert. Aber ich weiss nicht, wie ich Images ins Programm bekomme. Muss ich ein Image auf die Form machen? und wie lade ich die Images in das Array? ICH HABE KEINE AHNUNG! :oops:


... So, dass wars erstmal!
Aber ich muss ja auf eure Antworten warten und reagieren! :P


P.S. @ Mathias: Ich glaube aber, du könntest recht haben. Sieh mal hier die Skizze (auf Seite 9, siehe links unten in der Statuszeile). Dort fängt die Enigma aber rechts an (UKW = Umkehrwalze = Reflektor). Aber wenn ich die Skizze richtig lese, dann muss meine einwalzige Enigma richtig verschlüsseln, oder? :wink:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.11.02 20:38 
Zitat:
Ich meine, dass die Anordnung der Buchstaben egal ist, solange nur das Verschlüsselungsprinzip der Enigma dahinter steckt. ... Aber du kannst gerne probieren mich umzustimmen!

Nein, warum sollte ich? Halte dir einfach noch einmal das inzwischen schon mehr als einmal erwähnte Prinzip vor Augen: gibst du den Klartext ein, verschlüsselt die ENIGMA anhand der Walzenstellung. Gibst du den verschlüsselten Text ein, entschlüsselt die ENIGMA den Text anhand der selben Walzen- und Ausgangsstellung.
Also sollte dein Programm ebenso funktionieren, dann ist es eine ENIGMA.

Zitat:
wie kann ich den Code angucken?

Wenn du die ".java"-Dateien aus der source.tar.gz meinst, dazu reicht ein simpler Texteditor. Mit einem Editor wie Proton, [url]www.meybohm.de/proton.html[/url], siehst du den Sourcecode auch mit Syntax-Highlighting.
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 10.11.02 22:02 
MathiasSimmack hat folgendes geschrieben:
gibst du den Klartext ein, verschlüsselt die ENIGMA anhand der Walzenstellung. Gibst du den verschlüsselten Text ein, entschlüsselt die ENIGMA den Text anhand der selben Walzen- und Ausgangsstellung.

Das ist zwar richtig, jedoch ungenau. Zu einem symmetrischen Verschlüsselungsverfahren wird die Enigma erst durch den Reflektor. Es ist möglich, dass die Symmetrie auch noch von der Anordnung der Buchstaben abhängt, aber ich bin mir inzwischen nicht mehr so sicher.


Zu den Images: wenn Du einmal das Array erstellst hast, kannst Du die Bilder über TImage.picture.loadfromfile einlesen.

MfG,
Peter

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



BeitragVerfasst: Mo 11.11.02 15:04 
Peter Lustig hat folgendes geschrieben:
Das ist zwar richtig, jedoch ungenau.

Es ging nur um´s grundlegende Prinzip, Peter.

Zitat:
Es ist möglich, dass die Symmetrie auch noch von der Anordnung der Buchstaben abhängt, aber ich bin mir inzwischen nicht mehr so sicher.

Ist es auch nicht. Ich habe spaßeshalber mal eine Walzeneinstellung verändert -nach meinem Gutdünken. ´s ging auch. :)
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 13.11.02 13:48 
Die Erleuchtung - Teil 2

:autsch: :oops: :autsch: :oops: :autsch:
Jetzt habe ich (endlich, wurde ja auch mal langsam Zeit :wink: ) das Enigmaprinzip der Verschlüsselung verstanden!

Mein Fehler war, dass ich die ganze Zeit keinen Reflektor eingebaut hatte, weil ich verstanden hatte, es hätte auch Enigmas ohne Reflektor gegeben. Das mag ja auch vielleicht richtig sein, aber dann bräuchte man zwei verschiedene Enigmamaschienen - eine zur Ver-, eine zur Entschlüsselung.

Also bastel ich gerade an einer Enigma (erstmal nur eine Walze) mit Reflektor. Doch das ist schwieriger als gedacht! :wink:

Und ich habe die (ALLE?) Originalrotoreinstellungen der Enigma gefunden:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
{ Verschlüsselung            | Walze              | Notch | Turnover }
 { ABCDEFGHIJKLMNOPQRSTUVWXYZ | Eintrittswalze     |       |          }
 { EKMFLGDQVZNTOWYHXUSPAIBRCJ | Walze I            | Y     | Q        }
 { AJDKSIRUXBLHWTMCQGZNPYFVOE | Walze II           | M     | E        }
 { BDFHJLCPRTXVZNYEIWGAKMUSQO | Walze III          | D     | V        }
 { ESOVPZJAYQUIRHXLNFTGKDCMWB | Walze IV           | R     | J        }
 { VZBRGITYUPSDNHLXAWMJQOFECK | Walze V            | H     | Z        }
 { JPGVOUMFYQBENHZRDKASXLICTW | Walze VI           | H, U  | Z, M     }
 { NZJHGRCXMYSWBOUFAIVLPEKQDT | Walze VII          | H, U  | Z, M     }
 { FKQHTLXOCBJSPDZRAMEWNIUYGV | Walze VIII         | H, U  | Z, M     }
 { LEYJVCNIXWPBQMDRTAKZGFUHOS | Walze Beta         | M4    | M4       }
 { FSOKANUERHMBTIYCWLQPZXVGJD | Walze Gamma        | M4    | M4       }
 { YRUHQSLDPXNGOKMIEBFZCWVJAT | Reflektor B        |       |          }
 { FVPJIAOYEDRZXWGCTKUQSBNMHL | Reflektor C        |       |          }
 { ENKQAUYWJICOPBLMDXZVFTHRGS | Reflektor 'dünn' B | M4    | M4       }
 { RDOBJNTKVEHMLFCWZAXGYIPSUQ | Reflektor 'dünn' C | M4    | M4       }

 { QWERTZUIOPASDFGHJKLYXCVBNM = Tastaturlayout Computer}
 { QWERTZUIOASDFGHJKPYXCVBNML = Tastaturlayout ENIGMA}


Ich melde mich wieder, wenn ich die Enigma mit Reflektor gebastelt habe.

P.S. @ Mathias: Meine Facharbeit muss ich am 25.11.2002 abgeben, also kannst du Anfang Dezember deinen Quellcode posten (damit Peter was zu lesen hat :twisted: ).
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 13.11.02 20:48 
Peter kennt meinen Quellcode bereits. Er muss ja keine Facharbeit abgeben ...
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 14.11.02 09:41 
Moin!

@ Mathias: Hast du dir mal die Skizze angeguckt (Die Enigma beginnt rechts) ?

War die Enigma mit ihrem Tastaturlayout oder als Alphabet an die 1. Walze angeschlossen? Sprich ...

... war es:
ausblenden Quelltext
1:
2:
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
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

... oder:
ausblenden Quelltext
1:
2:
Q W E R T Z U I O A  S  D  F  G  H  J  K  P  Y  X  C  V  B  N  M  L
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


Ist zwar nicht so schlimm, wenn ich das Falsche nehme, aber dann ist es nicht die Originalenigma. :roll:

@ Peter: THX! Das mit dem Array of TImage klappt (wen auch bei einem Freund :wink: ). Also dürfte ich das bei mir auch hinkriegen!
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 14.11.02 16:50 
Noch ein paar Fragen:

Wie ist die Verknüpfung im Reflektor?
Ist es 1. Buchstabe -> 2. Buchstabe, 3. Buchstabe -> 4. Buchstabe, 5. Buchstabe -> 6. Buchstabe, ...
Oder 1. Buchstabe -> 26. Buchstabe, 2. Buchstabe -> 25. Buchstabe, 3. Buchstabe -> 24. Buchstabe, ...
Oder anders ?

Wie ist die Verknüpfung der Buchstaben in der Walze selbst?
Ist es 1. Buchstabe -> 6. Buchstabe, 6. Buchstabe -> 1. Buchstabe, 2. Buchstabe -> 17. Buchstabe, 17. Buchstabe -> 2. Buchstabe, ...
Oder willkürlich 1. Buchstabe -> 9. Buchstabe, 9. Buchstabe -> 5. Buchstabe, 2. Buchstabe -> 23. Buchstabe, 23. Buchstabe -> 25. Buchstabe, ...
Oder anders ?
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 14.11.02 19:38 
Auch wenn Eigenlob stinkt:

8) 8) 8) 8) 8)
!!!!! ICH HABE ES HINGEKRIEGT !!!!!
8) 8) 8) 8) 8)

Meine Enigma hat jetzt drei Walzen und verschlüsselt (hoffentlich :wink: ) richtig!
Allerdings ohne Reflektor, weil ich erst ausprobieren wollte, ob die Enigma denn auch funktioniert.

Überprüft das mal bitte:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
1. Walze:
 ABCDEFGHIJKLMNOPQRSTUVWXYZ
 ||||||||||||||||||||||||||
 EKMFLGDQVZNTOWYHXUSPAIBRCJEKMFLGDQVZNTOWYHXUSPAIBRCJ
 Nach jedem eingegebenen Buchstaben den Ersten löschen (also 'E', dann 'K', dann 'M' ...)

2. Walze:
 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
 ||||||||||||||||||||||||||
 AJDKSIRUXBLHWTMCQGZNPYFVOE

3. Walze:
 ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ
 ||||||||||||||||||||||||||
 BDFHJLCPRTXVZNYEIWGAKMUSQO

 E-P  I-J  N-K
 B-P  I-Z  S-C  S-H  C-J  H-K  E-L  N-C
 F-M  R-R  I-S  E-O  D-O  E-B  N-P

 Klartext: Ein bisschen Frieden
 Code: PJKPZCHJKLCMRSOOBP


BITTE sagt, dass meine Enigma richtig verschlüsselt!
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 16.11.02 13:04 
:oops: :oops: :oops:
Muss gestehen, dass mein letztes Posting falsch war, weil das dortige Programm falsch verschlüsselt hat.

Aber jetzt habe ich es (hoffentlich *ganzdollehoff*) richtig hingekriegt.
Zwar wieder nur mit drei Walzen ... aber immerhin.

Und mal wieder eine Frage:
Wenn ich als 1. Walze die Walze Nr. V verwende, dann kann ich diese doch nicht mehr als 2. oder 3. Walze verwenden, richtig?
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 16.11.02 13:34 
Kannst Du schon, aber das ist dann ganz bestimmt nicht mehr die Originalenigma.

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



BeitragVerfasst: Sa 16.11.02 17:47 
Das stimmt natürlich.

Wie kann ich einfach eine Zeile in einer ComboBox löschen?
Wenn nämlich als 1. Walze die Walze Nr. VI angeklickt wurde, so soll der Stringteil von Walze Nr. VI im String gelöscht werden und nicht mehr als mögliche Walze bei der 2. und 3. Walze vorhanden sein. Ich habe alle Walzeneinstellungen ein einem String gespeichert.
Geht das in ein paar Befehlen oder ist das komplizierter?
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 16.11.02 18:29 
Items aus einer Combobox löschen:
ausblenden Quelltext
1:
Combobox1.Items.Delete(index)					

Das hättest Du mit ein wenig Suchen aber auch selbst in der Hilfe finden können. :mahn:

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 16.11.02 19:16 
Ich habe über eine halbe Stunde lang da drin gesucht, aber nichts gescheites gefunden. Und mit ausprobieren, hat es eine Stunde gedauert.

Das soll keine Kritik sein :twisted:
D0P3 F!$H
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 16.11.02 20:16 
Kann ich als Ereignis auch eine eigene Prozedur aufrufen? Sähe dann etwa so aus:


Bei AuswahlWalze1Change (ist eine ComboBox):
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure AuswahlWalzen(WalzeX: String);
begin
case Chr(Length(WalzeX)) of
 '1' : ...
 '2' : ...
 '3' : ...
end;
end;


Geht das?
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 16.11.02 20:30 
Ich verstehe nicht, was Du meinst! :nixweiss:

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



BeitragVerfasst: So 17.11.02 11:17 
Ich meine folgendes:

Ich kann ja sagen, was passieren soll, wenn ich als 1. Walze eine andere als die Standardwalze nehme, z.B. Walze Nr. V.
Die Walzenauswahl habe ich ja mit einer ComboBox gemacht. Im Moment sieht das so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var Walze1Auswahl : String = 'EKMFLGDQVZNTOWYHXUSPAIBRCJ
AJDKSIRUXBLHWTMCQGZNPYFVOE
BDFHJLCPRTXVZNYEIWGAKMUSQO
ESOVPZJAYQUIRHXLNFTGKDCMWB
VZBRGITYUPSDNHLXAWMJQOFECK
JPGVOUMFYQBENHZRDKASXLICTW
NZJHGRCXMYSWBOUFAIVLPEKQDT
FKQHTLXOCBJSPDZRAMEWNIUYGV';
...
procedure TForm1.AuswahlWalze1Change(Sender: TObject);
var i : Integer;
begin
 for i := 1 to 26 do Walze1[i] := Walze1Auswahl[i + 26 * AuswahlWalze1.ItemIndex];
 { Aus allen verfügbaren Walzen wird die Ausgewählte in den String Walze1 kopiert }
end;
Da ich ja drei verschiedene Walzen bei der Enigma habe, brauche ich auch drei verschiedene ComboBoxen.

Aber ich will es so machen, dass ich jede zur Verfügunng stehende Walze nur einmal benutzen kann. Deshalb muss ich die Prozedur TForm1.AuswahlWalze1Change(Sender: TObject); mit Abfragen und Delete erweitern, um die als 1. Walze ausgewählte Walze in den Strings Walze2Auswahl und Walze3Auswahl zu löschen und auch die ausgewählte Walze in den anderen beiden ComboBoxen zu löschen.

Weil ich dann ja eine fast identische Prozedur dreimal hätte, wollte ich das mit eigenen Prozeduren machen. Das lernen wir gerade in der Schule mit Parameterübergabe und so.
Also will ich folgendes machen:
Wenn ich nun als 1. Walze Walze Nr. V nehme, so will ich nicht die Prozedur TForm1.AuswahlWalze1Change(Sender: TObject); aufrufen, sondern eine eigene mit der Parameterübergabe, um welche Walze es sich handelt. Und das wollte ich dann so aussehen lassen: Walzenauswahl(WalzeX: String); Wähle ich bei der 1. Walze nun eine Walze aus, so wird dann der String Walze1 übergeben. Ich frage dann in der Prozedur ab, um welche Walze es sich handelt:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure Walzenauswahl(WalzeX: String); 
begin 
  case Chr(Length(WalzeX)) of 
   '1' : ... 
   '2' : ... 
   '3' : ... 
  end; 
end;
Das ist meiner Meinung nach einfacher als für jede Walze die "OnChange"-Prozedur zu erweitern.

Meine Frage war nun, ob ich auch eigene Prozeduren im Objektinspektor einbauen kann.
In der Schule haben wir das nämlich eine "ButtonOnClick"-Prozedur und erst darin die eigene Prozedur aufgerufen.

Jetzt klar? :wink:
Ist die Frage beantwortet? Das Problem gelöst?

Dann klicke hier, um das Thema entsprechend zu markieren!