![]() |
Delphi Kryptologie
Hallo ihr Lieben,
ich soll für die Schule ein kleines Verschlüsselungsprogramm schreiben, indem wir auch die VErschlüsselung uns ausdenken. Es muss nichts hochsicheres sein aber es sollte funktionieren. Es ist eine Vigenere-Verschlüsselung. Ich möchte, dass der Benutzer ein Passwort eingibt und dann beginnt folgendes: Das Programm soll die erste Hälfte des Textes mit der Procedure Vigenere Verschlüsseln, die zweite Hälfte des Textes mit der Procedure Vigenerzwei: Vigenerezwei nutzt den umgedrehten Schlüssel. BSP: Hallo_wie_geht_es sind 17 Buchstaben (Leerzeichen ist _) Somit sollen die ersten 9 mit dem richtigen PW (zb.Hallo) verschlüsselt werden, die restlichen 8 mit dem umgerehten PW (ollah) Nun ist meine Frage: kann sich jemand mal meinen Quelltext anschauen und mir sagen wie man diese Unterteilung macht? (am betsen auch noch für das entschlüsseln) Dazu sei gesagt dass ich und mein Kumpel uns schon 3Stunden damit aberackert haben das zuschreiben mit : for i := 1 to (length(klartext) div 2) usw hat es nicht richtig funktioniert.
Delphi-Quellcode:
Anbei kann ich euch den link geben dass ihr euch das auf den rechner ladet.
UNIT uKryptobox;
(* ******************************************************************** *) (* K L A S S E : TKryptobox *) (* -------------------------------------------------------------------- *) (* Aufgabe : Einen Text ver- und entschluesseln nach dem Caesar- *) (* verfahren. Der Rohtext wird vorbehandelt: nur 'A'..'Z' *) (* zugelassen, kleine Buchstaben werden in grosse umgewan-*) (* Blanks, Satzzeichen als Blanks, der Rest wird ausgefil-*) (* tert. *) (* ******************************************************************** *) INTERFACE (* ========================== Export ================================== *) uses Sysutils, classes, dialogs, StrUtils; type TKryptoBox = class private Klartext, Geheimtext : string; Schluessel : string; key : integer; public constructor Init; procedure SetKlartext (kt : string); function GetKlartext : string; procedure SetGeheimtext (gt : string); function GetGeheimtext : string; procedure Verschluesseln; virtual; procedure Entschluesseln; virtual; procedure SetSchluessel (s : string); virtual; procedure vigenere; procedure entvigenere; procedure vigenerezwei; procedure entvigenerezwei; procedure umdrehen; private function GetStellenWertVon (Zeichen : char) : integer; function GetZeichenVon (StellenWert : integer) : char; procedure Vorbehandeln (var txt : string); end; IMPLEMENTATION (* ==================================================================== *) constructor TKryptobox.Init; (* -------------------------------------------------------------------- *) begin Klartext := ''; Geheimtext := ''; end; procedure TKryptobox.SetKlartext (kt : string); (* -------------------------------------------------------------------- *) begin Klartext := kt end; function TKryptobox.GetKlartext : string; (* -------------------------------------------------------------------- *) begin Result := Klartext end; procedure TKryptobox.SetGeheimtext (gt : string); (* -------------------------------------------------------------------- *) begin Geheimtext := gt; end; function TKryptobox.GetGeheimtext : string; (* -------------------------------------------------------------------- *) begin Result := Geheimtext; end; procedure TKryptobox.SetSchluessel (s : string); (* -------------------------------------------------------------------- *) begin if s ='' then Schluessel := 'a' else schluessel := s ; end; procedure TKryptobox.Verschluesseln; (* -------------------------------------------------------------------- *) var i : integer; begin vigenere; vigenerezwei; end; procedure TKryptobox.Entschluesseln; begin entvigenere; entvigenerezwei; end; function TKryptoBox.GetStellenWertVon (Zeichen : char) : integer; (* -------------------------------------------------------------------- *) begin case Zeichen of 'A'..'Z' : Result := ord(Zeichen) - 65 ; ' ' : Result := 26; end; end; function TKryptoBox.GetZeichenVon (StellenWert : integer) : char; (* -------------------------------------------------------------------- *) begin case Stellenwert of 0..25 : Result := chr(Stellenwert + 65); 26 : Result := ' '; end; end; procedure TKryptoBox.Vorbehandeln (var txt : string); (* -------------------------------------------------------------------- *) (* Auftrag: Rohtext von störenden Zeichen befreien *) (* vorher : *) (* nachher: kleine in GROSSE Buchstaben gewandelt; Umlaute umgewandelt; *) (* LeerZeichen, Satzzeichen als BLANK; *) (* -------------------------------------------------------------------- *) var i : integer; Zeichen : char; Hilfstext : string; begin Hilfstext := ''; for i := 1 to Length(txt) do begin Zeichen := txt[i]; case Zeichen of 'A'..'Z' : begin Hilfstext := Hilfstext + Zeichen; end; 'a'..'z' : begin Zeichen := UPCASE(Zeichen); Hilfstext := Hilfstext + Zeichen; end; 'Ä', 'ä' : begin Zeichen := 'A'; Hilfstext := Hilfstext + Zeichen; Zeichen := 'E'; Hilfstext := Hilfstext + Zeichen; end; 'Ö', 'ö' : begin Zeichen := 'O'; Hilfstext := Hilfstext + Zeichen; Zeichen := 'E'; Hilfstext := Hilfstext + Zeichen; end; 'Ü', 'ü' : begin Zeichen := 'U'; Hilfstext := Hilfstext + Zeichen; Zeichen := 'E'; Hilfstext := Hilfstext + Zeichen; end; 'ß' : begin Zeichen := 'S'; Hilfstext := Hilfstext + Zeichen; Zeichen := 'S'; Hilfstext := Hilfstext + Zeichen; end; chr(32) : begin Zeichen := ' '; Hilfstext := Hilfstext + Zeichen; end; chr(13) : begin Zeichen := ' '; Hilfstext := Hilfstext + Zeichen; end; '.' : begin Zeichen := ' '; Hilfstext := Hilfstext + Zeichen; end; ',' : begin Zeichen := ' '; Hilfstext := Hilfstext + Zeichen; end else begin (* den Rest ueberlesen *) end; end; (* case *) end; (* while *) txt := ''; // urspruenglichen Text loeschen und neuen zuweisen txt := Hilfstext; end; procedure TKryptobox.vigenere; var i,a,b,c, KTWert, GTWert : integer; Zeichen : char; begin Geheimtext := '' ; Vorbehandeln(Klartext); Vorbehandeln(schluessel) ; // hier kommt Ihr Verschluesselungsalgorithmus hin! b:= 1; for i := 1 to (length(klartext)) do begin Zeichen := klartext[i] ; Ktwert := Getstellenwertvon(klartext[i]) ; c := Getstellenwertvon(schluessel[b]) ; a := KTwert + c ; Zeichen := Getzeichenvon(a mod 27); Geheimtext:= Geheimtext + zeichen ; b := (b + 1) mod (length(schluessel)+1) ; If b = 0 then b := 1 ; end; END; procedure tkryptobox.entvigenere; var i,b,a,c ,d , KTWert, GTWert : integer; Zeichen : char; begin Klartext := '' ; Vorbehandeln(schluessel) ; // hier kommt Ihr Verschluesselungsalgorithmus hin! b:= 1; for i := 1 to (length(Geheimtext)-2) do begin Zeichen := Geheimtext[i] ; Ktwert := Getstellenwertvon(Geheimtext[i]) ; c := Getstellenwertvon(schluessel[b]) ; a := (KTwert - c+27) mod 27 ; Zeichen := Getzeichenvon((a)); Klartext := Klartext + Zeichen ; d:= (length(schluessel)+1) ; b:= b + 1 ; b := (b) mod d; If b = 0 then b := 1 ; end; end; procedure tkryptobox.vigenerezwei; var i,a,b,c, KTWert, GTWert : integer; Zeichen : char; begin umdrehen; Geheimtext := '' ; Vorbehandeln(Klartext); VOrbehandeln(schluessel) ; showmessage(schluessel); // hier kommt Ihr Verschluesselungsalgorithmus hin! b:= 1; for i := 1 to (length(klartext)) do begin Zeichen := klartext[i] ; Ktwert := Getstellenwertvon(klartext[i]) ; c := Getstellenwertvon(schluessel[b]) ; a := KTwert + c ; Zeichen := Getzeichenvon(a mod 27); Geheimtext:= Geheimtext + zeichen ; b := (b + 1) mod (length(schluessel)+1) ; If b = 0 then b := 1 ; end; END; procedure tkryptobox.entvigenerezwei; var i,b,a,c ,d , KTWert, GTWert : integer; Zeichen : char; begin umdrehen; Klartext := '' ; Vorbehandeln(schluessel) ; // hier kommt Ihr Verschluesselungsalgorithmus hin! b:= 1; for i := 1 to (length(Geheimtext)-2) do begin Zeichen := Geheimtext[i] ; Ktwert := Getstellenwertvon(Geheimtext[i]) ; c := Getstellenwertvon(schluessel[b]) ; a := (KTwert - c+27) mod 27 ; Zeichen := Getzeichenvon((a)); Klartext := Klartext + Zeichen ; d:= (length(schluessel)+1) ; b:= b + 1 ; b := (b) mod d; If b = 0 then b := 1 ; end; end; procedure tkryptobox.umdrehen; begin schluessel := reverseString(schluessel) end; end. [edit=Phoenix]Code in Delphi-Tags geändert. Mfg, Phoenix[/edit] |
Re: Delphi Kryptologie
So, mit der richtigen Formatierung für Delphi sieht das gleich besser aus *g*
Du kannst das Ding auch gleich hier an den Beitrag anhängen. Das ist geschickter als Links zu posten. |
Re: Delphi Kryptologie
|
Re: Delphi Kryptologie
Zitat:
|
Re: Delphi Kryptologie
wir wissen nicht genau was falsch ist der hat immer nur eine Hälfte kodiert demzufolge war das dekodieren natürlich unsinn
|
Re: Delphi Kryptologie
vielleicht mal ein Ansatz:
Delphi-Quellcode:
Jetzt kannst du ja text1 mit Vigenere verschlüsslen und text2 mit Vigenere2.
procedure Verschluessle;
var l: Integer; text1, text2: string; begin l := Length(klartext); text1 := Copy(klartext, 1, l div 2); text2 := Copy(klartext, l div 2 + 1, l); end; Für das Entschlüsseln genau das gleiche. Noch ein Anmerkung: Man kann das natürlich so machen wie Du ihr, aber ich würde die Verschlüsselungsproceduren mit Paramenter und Rückgabewert schreiben, das finde ich übersichtlicher. Edit: Mir fällt an eurem Code auf, dass ihr das da gar nicht macht, sondern Vigenere und Vigenere2 auf den gesammten Text anwenden. Wenn ihr mal euren Versuch, der nicht funktioniert posten könntet, dann wüssten wir, woran wir wären. ;-) [edit=Admin]Cache aktualisiert. Mfg, Daniel[/edit] |
Re: Delphi Kryptologie
@Benjamin:
Deine Code würde aber wenn Length(klartext) gerade wäre nicht richtig funktionieren machs lieber so : procedure Verschluessle; var l: Integer; text1, text2: string; begin l := Length(klartext); text1 := Copy(klartext, 1, l div 2); text2 := Copy(klartext, l div 2 + 1, l); if Length(klartext) mod 2 = 0 then text2 := Copy(klartext, l div 2 + 1, l); end; Vergiss es hab drei Quelltexte die ich hier zum testen geschrieben hab zusammen gemischt und ... naja ... man sieht ja was dabei herausgekommen ist :mrgreen: MfG Mike PS: Diese vier Zeilen :
Delphi-Quellcode:
könnte man auch einfach so schreiben (wegen der Übersichtlichkeit) :
Zeichen := 'A';
Hilfstext := Hilfstext + Zeichen; Zeichen := 'E'; Hilfstext := Hilfstext + Zeichen;
Delphi-Quellcode:
Hilfstext := Hilfstext + 'AE'
|
Re: Delphi Kryptologie
Delphi-Quellcode:
var
l: Integer; text1, text2: string; klartext : string; begin klartext := '123456'; l := Length(klartext); text1 := Copy(klartext, 1, l div 2); text2 := Copy(klartext, l div 2 + 1, l); ShowMessage(text1); ShowMessage(text2); end; Zitat:
|
Re: Delphi Kryptologie
Zitat:
edit : mir fällt gerade auf, dass Max den falschen Quelltext hochgeladen hat... das kann so ja net klappen natürlich sollte bei vigenere for i := 1 to length(Klartext) div 2 stehen und bei vigenere 2 eben die zweite hälfte... |
Re: Delphi Kryptologie
erledigt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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-2025 by Thomas Breitkreuz