Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Verschlüsselung bzw. Entschlüsselung will nicht gelingen (https://www.delphipraxis.net/178760-verschluesselung-bzw-entschluesselung-will-nicht-gelingen.html)

Faffy 25. Jan 2014 16:23

Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Hey folks,

folgendes Problem beschäftigt mich nun bereits seit einigen Tagen.
Ich habe versucht ein Programm zu schreiben, welches individuell gewählte Worte verschlüsselt, indem man jeden Buchstaben des zu verschlüsselnden Wortes und einen gewissen Wert verschiebt. Die Verschlüsselung an sich funktioniert auch reibungsfrei, jedoch die Entschlüsselung soll das Wort wiederherstellen. Wenn ich den Button für die Entschlüsselung jedoch betätige, so bleibt das Feld leer. Ich habe einmal vor dem Betätigen des Buttons etwas in das Edit-Feld hinein geschrieben, in das der entschlüsselte Text eingefügt werden soll. Lustiger Weise wird alles, was sich in dem Feld befindet einfach gelöscht.

Hier einmal die Procedure des Buttons:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
 var T, TN             : String;
     Z                 : Integer;
begin
   T := Edit2.Text;                                                            // T = Verschlüsselter Text, der entschlüsselt werden soll
   Z := 7;                                                                     // Z = Wert, um den der Buchstabe verschoben wird
   C.B(TN,T,Z);                                                                // C = Klasse TCaesar (Global deklariert), B = Methode zur Entschlüsselung
   Edit3.Text := TN;                                                           // TN = Neuer, entschlüsselter Text
end;


Und hier die Procedure der Entschlüsselungsmethode:
Delphi-Quellcode:
Procedure TCaesar.B (Var T : String; T2 : String; Z : Integer);
Var
 P, Code : Integer;                                                            // P = Länge des Wortes, Code = Verschlüsselungscode
 B      : String;                                                             // B = Buchstabe des Wortes
 B2      : Char;                                                               // B2 = Verschobener Buchstabe
Begin
For P := 1 to Length(T) Do
                                Begin
                                  B := Copy(T,P,1);
                                    Code := ORD(B[1]);
                                    Code := Code + Z;
                                    If (Code < 122) Then
                                                     Code := Code + 26;
                                    B2 := Char(Code);
                                    T2 := T2 + B2;
                                End;
                                End;

Ich hoffe ihr werdet mir helfen können.
Gruß
Faffy

Insider2004 25. Jan 2014 16:41

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Wieso machst Du Dir Dein Leben so schwer? Schau mal auf Deinen Code. Deiner grünen Kommentare sind länger als der Programmcode. Guter Code braucht keine Kommentare. Benenne Deine Variablen erst mal gescheit.

Uwe Raabe 25. Jan 2014 16:53

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Innerhalb deine Entschlüsselungsmethode hast du die Bedeutung von T und T2 vertauscht.

Faffy 25. Jan 2014 17:03

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Ah, mir ist aufgefallen, was mein Fehler war.. Ich habe den Quelltext jetzt ein wenig überarbeitet, sodass folgendes entstanden ist:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
 var T, TN             : String;
     Z                 : Integer;
begin
   T := Edit2.Text;                                                            // T = Verschlüsselter Text, der entschlüsselt werden soll
   Z := 7;                                                                     // Z = Wert, um den der Buchstabe verschoben wird
   C.B(TN,T,Z);                                                              // C = Klasse TCaesar (Global deklariert)
   Edit3.Text := TN;                                                           // TN = Neuer, entschlüsselter Text
end;


Und für die Methode:
Delphi-Quellcode:
Procedure TCaesar.B (Var T2 : String; T : String; Z : Integer);
Var
 P, Code : Integer;                                                            // P = Länge des Wortes, Code = Verschlüsselungscode
 B      : String;                                                             // B = Buchstabe des Wortes
 B2      : Char;                                                               // B2 = Verschobener Buchstabe
Begin
For P := 1 to Length(T) Do
                                Begin
                                  B := Copy(T,P,1);
                                    Code := ORD(B[1]);
                                    Code := Code + Z;
                                    If (Code < 122) Then
                                                     Code := Code - 26;
                                    B2 := Char(Code);
                                    T2 := T2 + B2;
                                End;
                                End;
Nun entschlüsselt er auch, jedoch wird nicht das entschlüsselt, was entschlüsselt werden soll. Er gibt nicht den Ausgangsbegriff wieder raus, sondern etwas völlig anderes. Aus "ttt" wird "MMM".

Uwe Raabe 25. Jan 2014 17:16

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Dann zeig doch mal die Verschlüsselung...

Faffy 25. Jan 2014 17:57

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Ich lege einfach mal alles genauer dar.

Verschlüsselungsbutton:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var T,T2 : String;
    Z : Integer;

begin
  T := Edit1.Text;
  Z:= 7;
  C.A(T,T2,Z);
  Edit2.Text := T2;
end;
Verschlüsselungsmethode:
Delphi-Quellcode:
Procedure TCaesar.A (T : String; Var T2 : String; Z : Integer);                // T = Zu verschlüsselndes Wort, T2 = Verschlüsseltes Wort, Z = Irrelevant (Zahl, um die verschoben wird, ist aber nicht angegeben)
Var
 P, Code : Integer;                                                            // P = Länge des Wortes, Code = Verschlüsselungscode
 B      : String;                                                             // B = Buchstabe des Wortes
 B2      : Char;                                                               // B2 = Verschobener Buchstabe
Begin
For P := 1 to Length(T) Do
                                Begin
                                  B := Copy(T,P,1);
                                    Code := ORD(B[1]);
                                    Code := Code - Z;
                                    If (Code > 122) Then
                                                     Code := Code - 26;
                                    B2 := Char(Code);                          // B2 = Verschlüsselter Buchstabe
                                    T2 := T2 + B2;                             // T2 = Verschlüsselter Text
                                End;
                                End;
Entschlüsselungsbutton:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
 var T, TN             : String;
     Z                 : Integer;
begin
   T := Edit2.Text;                                                            // T = Verschlüsselter Text, der entschlüsselt werden soll
   Z := 7;                                                                     // Z = Wert, um den der Buchstabe verschoben wird
   C.B(TN,T,Z);                                                              // C = Klasse TCaesar (Global deklariert)
   Edit3.Text := TN;                                                           // TN = Neuer, entschlüsselter Text
end;
Entschlüsselungsmethode:
Delphi-Quellcode:
Procedure TCaesar.B (Var T2 : String; T : String; Z : Integer);
Var
 P, Code : Integer;                                                            // P = Länge des Wortes, Code = Verschlüsselungscode
 B      : String;                                                             // B = Buchstabe des Wortes
 B2      : Char;                                                               // B2 = Verschobener Buchstabe
Begin
For P := 1 to Length(T) Do
                                Begin
                                  B := Copy(T,P,1);
                                    Code := ORD(B[1]);
                                    Code := Code + Z;
                                    If (Code < 122) Then
                                                     Code := Code + 26;
                                    B2 := Char(Code);
                                    T2 := T2 + B2;
                                End;
                                End;

Uwe Raabe 25. Jan 2014 18:13

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Das sind doch die relevanten Stellen:

Delphi-Quellcode:
  Code := Code - Z;
  If (Code > 122) Then
    Code := Code - 26;
Delphi-Quellcode:
  Code := Code + Z;
  If (Code < 122) Then
    Code := Code + 26;
Überleg dir mal, warum bei der Verschlüsselung die IF-Abfrage kommt und was sie bewirkt. Dann überleg mal, wie dieser Vorgang rückgängig gemacht werden muss. Dann siehst du auch, was bei der Enschlüsselung falsch läuft.

DayDreamer87 25. Jan 2014 18:17

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1245343)
Das sind doch die relevanten Stellen:

Delphi-Quellcode:
  Code := Code - Z;
  If (Code > 122) Then
    Code := Code - 26;
Delphi-Quellcode:
  Code := Code + Z;
  If (Code < 122) Then
    Code := Code + 26;
Überleg dir mal, warum bei der Verschlüsselung die IF-Abfrage kommt und was sie bewirkt. Dann überleg mal, wie dieser Vorgang rückgängig gemacht werden muss. Dann siehst du auch, was bei der Enschlüsselung falsch läuft.

Ich bin in der Materie zwar noch relativ neu und, sofern falsch, beachtet mich gar nicht...

Aber nachdem ich das ganze mal nachgebastelt habe, funktionierts nu bei mir :)
Fehler dürfte das im Zitat rot markierte Zeichen sein.

Hoffe mal, dass mein erster Beitrag korrekt ist.

Grüße

Day

Edit: Farbige Markierungen im Delphi Code funktionieren nicht...
In Prozedur B:
If (Code > 122) Then ... so funktionierts

Faffy 26. Jan 2014 00:26

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Perfekt, vielen Dank. Jetzt funktioniert es echt wunderbar, ihr habt mir sehr geholfen.

Eine Frage hätte ich jedoch noch, da mir das nicht ganz klar ist.
Warum muss bei Procedure A
Delphi-Quellcode:
Procedure TCaesar.A (T : String; Var T2 : String; Z : Integer);
Das "Var T2 : String" hinter "T : String;" stehen und bei Procedure B

Delphi-Quellcode:
Procedure TCaesar.B (Var T2 : String; T : String; Z : Integer);
das "Var T2 : String;" eben am Anfang?

sx2008 26. Jan 2014 00:58

AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
 
Zitat:

Zitat von Insider2004 (Beitrag 1245333)
Schau mal auf Deinen Code. Deiner grünen Kommentare sind länger als der Programmcode. Guter Code braucht keine Kommentare. Benenne Deine Variablen erst mal gescheit.

Das kann ich nur unterstützen!!
Variablen- und Funktionsnamen dürfen wirklich mehr als ein oder zwei Buchstaben lang sein.
Die Zeiten von Sharp Taschenrechner mit ihrem Basic-Dialekt sind lange vorbei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz