Autor |
Beitrag |
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Do 13.01.05 16:22
Jaaaa,
damals war ich... aber ich schweife ab.
Ich würde den Chiffrier-Algorithmus so halt nicht wählen, wo wir doch mittlerweile mit verschränkten Elementarteilchen arbeiten können, was ja eine ziemlich tolle Codierung ist, ein wenig passende Hardware vorausgesetzt.
gerüßt!
MitschL
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Do 13.01.05 16:27
@goog: Könntest du bitte den Titel dieses Topics ändern. Mit Parameterübergabe hat dieses Topic ja leider seit x Beiträgen nichts mehr zu tun. In Zukunft bitte nicht vom Thema abkommen und lieber dafür ein neues Topic eröffnen.
Zuletzt bearbeitet von Tino am Do 13.01.05 17:04, insgesamt 1-mal bearbeitet
|
|
goog 
      
Beiträge: 37
|
Verfasst: Do 13.01.05 16:42
Hi Leute!
MitschL hat geschrieben:
Ich würde den Chiffrier-Algorithmus so halt nicht wählen...
Ich hätte mich wahrscheinlich auch für ein anderes Verfahren entschieden, aber mit meinem Infolehrer ist nicht zu reden
Jetzt muss ich sehen wie ich damit zu recht komme.
gruß johannes
|
|
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Do 13.01.05 17:15
Hm,
dann sag deinem Lehrer einen schönen Gruß von mir (das wird ihn freuen  ): Er mag doch bitte etwas lehren, das sinnvoll ist. Ein Chiffrier-Algorithmus, der im strengen Sinne nichts taugt, weil das Dechiffrieren Auslegungssache ist, (- wegen Spaces und i/j -) ist bedingt sinnvoll, selbst wenn es gar nicht um den Algorithmus geht, sondern um die Programmierarbeit.
Was jetzt noch toll wäre, ist ein Programm, welches genau den Fall errechnet, bei dem der Payrfair-Algorithmus versagt.
gegrüßt!
|
|
goog 
      
Beiträge: 37
|
Verfasst: Do 13.01.05 22:04
Hi MitschL!
Mein Lehrer meinte zum dechiffrieren sollte ich die gleiche Funktion benutzen wie zum chiffrieren.
HÄÄÄÄÄÄÄ 
|
|
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Fr 14.01.05 10:37
goog hat folgendes geschrieben: | Mein Lehrer meinte zum dechiffrieren sollte ich die gleiche Funktion benutzen wie zum chiffrieren. |
Moin,
Das ist bei dem PayrFair eigentlich ganz einfach.
Du must dich nur fragen: was unterscheidet den verschlüsselten Text vom Original?
Satzzeichen sind nicht mehr vorhanden: Wenn ich auf die Werke vieler Chatter und Foren-Nutzer schaue, dann ist der Einsatz von Satzzeichen nicht uneingeschränkt empfehlbar.
Kein J: Reicht auch nicht.
Leerzeichen an jeder dritten Stelle: Das könnte klappen, wobei ich aber an anderer Stelle gesehen habe, daß deren Ergebnis ein einzelnes Wort darstellt. (Ich habe bisher drei verschiedene Varianten des Playfair gesehen, weshalb ich glaube, das das Original viel abstrakter gehalten war.)
Da diese Fragen nicht eindeutig beantwortet werden können, brauche ich eine definitive Angabe, wie ein kodierter und ein originaler Text aussehen soll.
Dann kannst du einen Aufruf machen, wie:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function PlayFair( text, key: String ): String; var isChiffred: Boolean; begin isChiffred := CheckText( text ); if isChiffred then Result := Dechiffre( text, key ) else Result := Chiffre( text, key );
end; |
Intern arbeitest du weiterhin mit deinen einzelnen Methoden.
gegrüßt!
MitschL
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Fr 14.01.05 12:12
Bisher habe ich nichts zu Playfair gelesen, außer das, was in diesem Thread steht. Hatte den Vorteil, ich konnte ohne jede Wissensvorbelastung an die eigentlichen Delphi-Probleme von goog herangehen. Die scheinen aber nicht mehr im Fokus zu stehen ...
Also habe ich nun mal den anderen Thread ...
www.delphi-forum.de/...irChiffre_34721.html
... gelesen.
Und nun sollten wir vielleicht mal sortieren:
Was ich bisher nicht wusste ist, dass der Code, den wir hier im Thread behandelt haben, nicht Teil der Verschlüsselung ist. Es ist die Zerlegung (unter Einbringung der X und so weiter und so blubb). Die Zerlegung ist definitiv nicht reversibel, wie wir hier auch schon festgestellt haben. Nach der Decodierung eines nach Playfair codierten Textes muss man also hoffen, dass der "Text" (mit seinen ganzen X darin und ohne Zeichen und Leerstellen) irgendwie einen Sinn ergibt. Perfekt "zurückzerlegen" geht jedenfalls nicht.
Die Ver- und Entschlüsselungsroutinen können definitv nicht dieselben sein! Steht auch so in der Beschreibung im anderen Thread.
Die Routine (für die, wie wir nun wissen, Zerlegung), die ich zuletzt postete zerlegt nicht richtig. Diese hier nun sollte das aber tun (sie heißt jetzt folgerichtig "zerlege"): Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function zerlege (text:string):string; var i : integer; begin i:=1; while i < length(text) do begin if text[i]=text[i+1] then begin insert('X',text,i+1); end; inc(i,2); end; if odd(length(text)) then text:=text+'X'; result:=text; end; |
So, und wie machen wir hier im Thread nun weiter?
|
|
MitschL
      
Beiträge: 211
Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
|
Verfasst: Fr 14.01.05 12:28
Tja,
wir erstellen goog einen reversiblen PayrFair-Algorithmus mit ein paar interessanten Einfügungen, wie einer 4-dimensionalen Matrix, die 81 Zeichen aufnimmt und ein Füllzeichen nutzt, welches nicht im eigentlichen Text auftauchen tut. (wie oben erwähnt)
Wie soll er da noch sagen können, das das falsch ist, wenn er es nicht versteht?
Ich habe in der Schule und bei der Lehre gern Programme gebastelt, die trotz korrekter Logik und fast schon zu einfach gehaltener Syntax vom Lehrkörper unverstanden blieben. Ein wenig Mathematik einstreuen oder die Abstraktions-Ebene anheben und dann hört es bei erschreckend vielen Lehrern (- also alle, die ich kenne - ) auf.
gegrüßt!
MitschL
PS.: Ich weis; man kann auch über das Ziel hinausschießen, aber mich interessiert mein Gedanke - is ja auch mein Gedanke - und deswegen werde ich ihn so oder so umsetzen wollen. 
|
|
goog 
      
Beiträge: 37
|
Verfasst: Fr 14.01.05 19:21
Hi Leute !
Man find ich echt korrekt von euch das ihr mir so helft.
Jetzt muss ich bloß noch den restlichen Quelltext hinkriegen (hhhmmmmm....?)
Was die Lehrer betrifft da muss ich dir Recht geben.
Stellt man im Unterricht eine Frage, die nur einen kleinen Schritt weiter geht als der "normale" Schulstoff, bekommt man meist als Antwort: "Das kommt erst in höheren Klassenstufen dran" oder "Lass uns erst mal das jetzige Thema richtig behandeln".
gruß johannes
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Fr 14.01.05 19:49
goog hat folgendes geschrieben: | Schritt weiter geht als der "normale" Schulstoff, bekommt man meist als Antwort: "Das kommt erst in höheren Klassenstufen dran" oder "Lass uns erst mal das jetzige Thema richtig behandeln".
|
Tja, nur hat dein Lehrer nicht ganz Unrecht, oder? Du kriegst ja nun mal die geforderte Aufgabe (sprich: "das jetzige Thema") noch lange nicht so ohne weiteres hin. Warum also das Leben verkomplizieren und einen schwereren Playfair-Algorithmus bauen, den du deinem Lehrer niemals erklären könntest ...? Sei am Ende froh, wenn du die gestellte Aufgabe bewältigst und das Ergebnis verstehst. Ich stimme da also eurer Diskussion nicht zu, doch gleich "was richtiges" zu machen.
Wenn dein Lehrer dieses wackelige Playfair-Etwas haben will, so mache ihm das.
Was uns zurück zum Thema bringt:
Die Zerlegung hast du nun. Was gedenkst du kommt als nächstes?
|
|
goog 
      
Beiträge: 37
|
Verfasst: Fr 14.01.05 21:29
Hi IngoD7 !
Also ich hab mir mal ein paar Gedanken gemacht.
Als nächstes müsste ich Zeile und Spalte von je zwei aufeinanderfolgenden Buchstaben rausfinden und dann schauen ob entweder die Zeilen gleich sind oder die Spalten oder ob keines von beiden zutrifft. Zeilen und Spalten bekomme ich mit Z=(P-1) DIV 5 bzw.
S=(P-1) MOD 5 heraus.
Ich schau einfach an welcher Position der Buchstabe in meiner Matrix steht und bekomme so P und damit Zeilen und Spalten.
So sieht mein Quelltext für die Matrix aus:
Delphi-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:
| procedure TForm1.Button1Click(Sender: TObject); var code,nc,text: string; l,i,p,p2 :integer; begin code:='MATHEMATIKER'; text:=edit2.text; text:=zerlege(text); l:=length(code); nc:=''; for i:=1 to l do begin if code[i]='j' then code[i]:='i'; p:=pos(code[i],nc); if p=0 then nc:= nc+code[i]; end;
alpha:=nc; for i:=1 to 26 do begin p2:=pos(al[i],alpha); if p2=0 then alpha:=alpha+al[i]; end; edit3.text:=text; end; |
Ist das bis hierher so umsetzbar?
gruß goog
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Fr 14.01.05 22:02
goog hat folgendes geschrieben: | So sieht mein Quelltext für die Matrix aus:
Delphi-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:
| procedure TForm1.Button1Click(Sender: TObject); var code,nc,text: string; l,i,p,p2 :integer; begin code:='MATHEMATIKER'; text:=edit2.text; text:=zerlege(text); l:=length(code); nc:=''; for i:=1 to l do begin if code[i]='j' then code[i]:='i'; p:=pos(code[i],nc); if p=0 then nc:= nc+code[i]; end;
alpha:=nc; for i:=1 to 26 do begin p2:=pos(al[i],alpha); if p2=0 then alpha:=alpha+al[i]; end; edit3.text:=text; end; |
Ist das bis hierher so umsetzbar?
|
Du solltest mal ein wenig kommentieren, deinen code.
Was ich sehe ist, das nc dein Codewort ohne doppelte Buchstaben darstellt. al ist ein String mit allen Buchstaben, oder wie sehe ich das? Bin doch kein Hellseher ... Allerdings musst du da dann auch i oder j entfernen, sonst hat deine Matrix 26 Zeichen.
Wenn ja, wird alpha deine Matrix. Sehe ich das richtig?
|
|
goog 
      
Beiträge: 37
|
Verfasst: Fr 14.01.05 22:28
Hi Ingo D7!
Sorry wegen den comments hab ich total vergessen.
Delphi-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:
| procedure TForm1.Button1Click(Sender: TObject); var schluessel,ns,text: string; l,i,p,p2 :integer; begin schluessel:='MATHEMATIKER'; l:=length(schluessel); ns:=''; for i:=1 to l do begin if schluessel[i]='j' then schluessel[i]:='i'; p:=pos(schluessel[i],ns); if p=0 then ns:= ns+schluessel[i]; end;
matrix:=ns; for i:=1 to 25 do begin p2:=pos(al[i],matrix); if p2=0 then matrix:=matrix+al[i]; end; end; |
Du hast Recht al ist eine Konstante mit allen Buchstaben außer j.
Ich habe alpha mal in matrix umgewandelt und code in schluessel, ich finde das verständlicher.
Ich habe matrix als globale Variable gewählt, ist das richtig?
gruß goog
Zuletzt bearbeitet von goog am Fr 14.01.05 23:14, insgesamt 1-mal bearbeitet
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Fr 14.01.05 22:56
goog hat folgendes geschrieben: | Du hast Recht al ist eine Konstante mit allen Buchstaben außer j. |
Wenn al alle Buchstaben außer j sind, warum geht die Schleife dann von 1 bis 26 ?
goog hat folgendes geschrieben: | Ich habe matrix als globale Variable gewählt, ist das richtig? |
Kommt immer auf die sonstige Struktur eines Programmes an. Findest garantiert viele Leute, die globale Variablen grundsätzlich ablehnen. Mir ist's wurscht. Ich arbeite auch damit.
Aber was anderes:
Man kann mit matrix als String sicher leben. Du musst dann, wie du richtig gesehen hast, mit DIV und MOD und sowas arbeiten. Das geht natürlich, artet aber in viel Rechnerei aus, da du später ja auch noch rechts und links und oben und unten von P Buchstaben zum Ver- und Entschlüsseln suchen musst.
Bist du sicher, dass du keine echte Matrix, also ein array[1..5, 1..5] of char nehmen willst?
|
|
goog 
      
Beiträge: 37
|
Verfasst: Fr 14.01.05 23:13
Hi IngoD7!
Stimmt meine Schleife muss nur bis 25 gehen, man kann halt nicht an alles denken, oder?!
Vielleicht ist das besser mit deinem Vorschlag.
Nur leider sagt das mir nicht allzu viel mit array[1..5, 1..5] of char?
Wie würde sich denn dann mein Quelltext ändern?
gruß goog
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Sa 15.01.05 12:37
[NACHTRAG] (eine Stunde später):
Habe nochmal nachgedacht. Bleibe bei deinem Lösungsansatz! Es ist so möglich und du hast bereits durchblicken lassen, dass du mit einem String als Matrix wirst umgehen können. Kein Grund also, die Strategie zu wechseln.
Das hiernach stehende Ursprungsposting ist zwar grundsätzlich nicht falsch - deshalb lasse ich es auch stehen und lösche es nicht -, aber bleibe ruhig bei dem, wozu du dich mal entschieden hast. Das wird gut funktionieren.
[/Nachtrag]
goog hat folgendes geschrieben: | Vielleicht ist das besser mit deinem Vorschlag.
Nur leider sagt das mir nicht allzu viel mit array[1..5, 1..5] of char?
Wie würde sich denn dann mein Quelltext ändern?
|
Hm, habt ihr noch keine Arrays durchgenommen? Und dann solche Sachen programmieren müssen? Ich verstehe das nicht. Zu meiner Zeit gab's sowas nicht ....
Andererseits hat ein Matrix-String später beim Auffinden eines gesuchten Buchstabens den Vorteil, das einfach mit dem Befehl Pos machen zu können.
Ich weiß jetzt nicht, ob ich dir dazu raten soll. Normalerweise ist's wohl besser, du verfolgst das weiter, was du dir selber ausgedacht hast.
Trotzdem kurz zum Quelltext mit Arrays: Nun ja, du könntest zum Beispiel eine Matrix Matrixfeld als array[1..5,1..5] of char deklarieren. Damit hast du eine 5 x 5 große Matrix und kannst jedes einzelnes Feld darin direkt ansprechen; das Feld in Zeile 4, Spalte 2 z.B. mit Matrixfeld[4,2].
Erstellen (und später auch durchsuchen) würde man die Matrix mit zwei verschachtelten for-Schleifen.
Delphi-Quelltext 1: 2: 3: 4: 5:
| for Zeile := 1 to 5 do for Spalte := 1 to 5 do begin ... end; |
Hat den Vorteil, dass wenn du hier einen Buchstaben innerhalb der Schleifen suchst und findest hast du sofort die Position in der Matrix (angezeigt durch Zeile und Spalte), ohne lange zu rechnen. Den Buchstaben unter einem gefundenen (für die Verschlüsselung) hast du dann einfach mit Matrixfeld[Zeile,Spalte+1] (man würde hier natürlich noch, wie sonst auch, den Überlauf über 5 beachten müssen).
Soll ein kleiner Ausritt gewesen sein. Du musst nun wissen, ob du dir über die Online-Hilfe oder über die Forum-Suche hier noch mehr Infos über Arrays anlesen musst, oder ob du das beiseite schiebst. Es gibt viele Methoden, die Matrix zu erstellen und später mit ihr zu arbeiten. Alle haben Vor- und Nachteile.
Es ist deine Entscheidung. Ich wollte dich nicht unnötig durcheinanderbringen, konnte aber auch nicht ahnen, dass dir Arrays kein Begriff sind.
|
|
goog 
      
Beiträge: 37
|
Verfasst: So 16.01.05 17:40
Hi IngoD7
Ich komm einfach nicht weiter.
Was soll ich jetzt alles in die Verschluessel Funktion mit reinpacken?
Sollte ich erst alle Zeilen und Spalten rausfinden und dann Verschluesseln oder gleich Buchstabe für Buchstabe?
gruß goog
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: So 16.01.05 18:55
goog hat folgendes geschrieben: |
Sollte ich erst alle Zeilen und Spalten rausfinden und dann Verschluesseln oder gleich Buchstabe für Buchstabe?
|
Buchstabe für Buchstabe wird ja nicht gehen. Du musst doch die Positionen eines Buchstaben päärchens in der Matrix bestimmen, um überhaupt zu entscheiden, auf welche Art und Weise die Buchstaben dieses Päärchens verschlüsselt werden müssen.
Behandele deinen zu verschlüsselnden Text also päärchenweise. Dazu würde ich eine Schleife nehmen. Diese Schleife wird halb so viele Durchläufe brauchen, wie dein Text lang ist (eben, weil immer 2 Buchstaben zusammen abgearbeitet werden).
In der Schleife passiert folgendes:
a.) Du nimmst einen Buchstaben und schaust in der Matrix, welche Zeile und Spalte der hat.
b.) Dann nimmst du den nächsten Buchstaben und guckst wieder, welche Zeile und Spalte der hat.
c.) Dann musst du gucken, ob die beiden in derselben Spalte oder Zeile liegen und entsprechend (siehe Playfair-Beschreibung) die beiden Buchstaben verschlüsseln.
d.) Die verschlüsselten Buchstaben sammelst du jeweils in einem Ergebnisstring.
Das ist der theoretische Ansatz. Nun schaue mal, wie die Schleife auszusehen hat.
|
|
goog 
      
Beiträge: 37
|
Verfasst: So 16.01.05 20:08
Hi IngoD7 !
Ich hab mal versucht den Anfang hinzukriegen aber ich glaub das funktioniert nicht so richtig.
Ist das richtig mit den zwei for-Schleifen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function verschluessel (text:string):string ; var i,j,p,l,p1,z1,s1,p2,z2,s2:integer; begin l:=length(text); for i:=1 to l do for j:=1 to 25 do if text[i]=matrix[j] then p1:=pos(text[i],matrix); z1:=(p1-1) DIV 5; s1:=(p1-1) MOD 5; inc(i); if text[i]=matrix[j] then p2:=pos(text[i],matrix); z2:=(p2-1) DIV 5; s2:=(p2-1) MOD 5; inc(i,2); If z1=z2 then ???
end; |
Hoffentlich krieg ich das Programm bis Mittwoch fertig, sonst gibts wohl Ärger
gruß goog
|
|
IngoD7
      
Beiträge: 629
D7
|
Verfasst: Mo 17.01.05 10:59
Da stimmt noch einiges nicht.
Wenn du deinen Code kommentieren würdest, würde dir dabei vielleicht einiges auffallen. Dann hättest du nämlich Schwierigkeiten, die zweite j-Schleife zu erklären.
Wir wollten eine Schleife machen und in der Schleife das hier:
IngoD7 hat folgendes geschrieben: | a.) Du nimmst einen Buchstaben und schaust in der Matrix, welche Zeile und Spalte der hat.
b.) Dann nimmst du den nächsten Buchstaben und guckst wieder, welche Zeile und Spalte der hat.
c.) Dann musst du gucken, ob die beiden in derselben Spalte oder Zeile liegen und entsprechend (siehe Playfair-Beschreibung) die beiden Buchstaben verschlüsseln.
d.) Die verschlüsselten Buchstaben sammelst du jeweils in einem Ergebnisstring. |
Die Schleife hast du (deine i-Schleife). Mit der j-Schleife versuchst du, deine Matrix zu durchlaufen. Warum? Um die Position des Buchstabens zu finden? Das geht doch alleine mit Pos. Pos hast du doch beim Matrix erstellen z.B. schon sehr gut angewendet.
Die j-Schleife und deine beiden if text[i]=matrix[j] thensind also überflüssig.
((Nebenbei: Wenn im then-Teil mehrere Anweisungen ausgeführt werden sollen, müssen diese in begin..end eingeschlossen werden.))
Die i-Schleife ändern wir in eine while-Schleife, weil wir dann auch die Variable i innerhalb der Schleife verändern dürfen.
Das bringt mich zum nächsten Punkt. Du musst auch mal irgendwie versuchen, deine Sachen auszutesten. Das macht jeder mehr oder minder regelmäßig, weil niemand die Auswirkungen dessen, was er fabriziert, immer vorausschauen kann. Man testet nicht erst am Schluß das ganze Programm, sondern auch schon zwischendurch bestimmte Teile. Dabei wäre dir aufgefallen, dass du i nicht innerhalb der for-Schleife verändern darfst (Delphi meckert hier).
Aus deinem Code wird damit zunächst folgendes - achte auf die Kommentare darin:
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:
| function Verschluessel(text:string):string; var i,p,l,p1,z1,s1,p2,z2,s2:integer; begin l:=length(text); i:=1; while i < l do begin if text[i]='J' then text[i]='I'; p1:=pos(text[i],matrix); z1:=(p1-1) DIV 5; s1:=(p1-1) MOD 5; inc(i); if text[i]='J' then text[i]='I'; p2:=pos(text[i],matrix); z2:=(p2-1) DIV 5; s2:=(p2-1) MOD 5; inc(i); if z1=z2 then begin ... ... end else if s1=s2 then begin ... ... end else begin ... ... end; ... ... end; end; |
Denke an deine DIV- und MOD-Formeln. Probiere es aus. Nimm z.B. eine Extraformular, packe da ein Button1 und ein Memo1 rauf und mache dieses:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm2.Button1Click(Sender: TObject); var Position, Spalte, Zeile : integer; begin for Position := 1 to 25 do begin Zeile := (Position-1) DIV 5; Spalte := (Position-1) MOD 5; Memo1.Lines.Add('Position '+inttostr(Position)+' = Zeile '+inttostr(Zeile)+'; Spalte '+inttostr(Spalte)); end; end; |
Drücke da mal den Button. Anhand der angezeigten Ergebnisse im Memo wirst du schnell sehen, was da nicht stimmt.
Versuche mal, die Verschlüsselung fertig zu bekommen.
|
|
|