![]() |
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 |
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.
|
AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
Innerhalb deine Entschlüsselungsmethode hast du die Bedeutung von T und T2 vertauscht.
|
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:
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".
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; |
AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
Dann zeig doch mal die Verschlüsselung...
|
AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
Ich lege einfach mal alles genauer dar.
Verschlüsselungsbutton:
Delphi-Quellcode:
Verschlüsselungsmethode:
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;
Delphi-Quellcode:
Entschlüsselungsbutton:
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;
Delphi-Quellcode:
Entschlüsselungsmethode:
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;
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; |
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:
Ü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.
Code := Code + Z;
If (Code < 122) Then Code := Code + 26; |
AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
Zitat:
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 |
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:
Das "Var T2 : String" hinter "T : String;" stehen und bei Procedure B
Procedure TCaesar.A (T : String; Var T2 : String; Z : Integer);
Delphi-Quellcode:
das "Var T2 : String;" eben am Anfang?
Procedure TCaesar.B (Var T2 : String; T : String; Z : Integer);
|
AW: Verschlüsselung bzw. Entschlüsselung will nicht gelingen
Zitat:
Variablen- und Funktionsnamen dürfen wirklich mehr als ein oder zwei Buchstaben lang sein. Die Zeiten von Sharp Taschenrechner mit ihrem ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz