unit uFenster;
(* ************************************************************************** *) (* K L A S S E : *) (* -------------------------------------------------------------------------- *) (* Version : 1.X *) (* Autor : Michael Nicolai (Basis von Siegfried Spolwig) *) (* Beschreibung: Das Fenster ist das GUI fuer das Programm CyberKryptoX. *) (* Es stellt den Rahmen für die Ver- und Ent- *) (* schluesselungen von Texten dar. *) (* Compiler : Delphi 4.0 + addons *) (* ************************************************************************** *)
interface (* ========================================================================== *) uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ExtCtrls, uKryptobox;
type TFenster = class(TForm) KTxPnl : TPanel; GTxPnl : TPanel; KlartextMmo : TMemo; GeheimtextMmo : TMemo; OpenDialog1 : TOpenDialog; SaveDialog1 : TSaveDialog; MainMenu1 : TMainMenu; Label1 : TLabel; Label2 : TLabel; DateiMnu : TMenuItem; BearbeitenMnu : TMenuItem; KtxLadenMnu : TMenuItem; KtxSpeichernMnu : TMenuItem; KodierenMnu : TMenuItem; DekodierenMnu : TMenuItem; GtxLadenMnu : TMenuItem; GtxSpeichernMnu : TMenuItem; LoeschenKTxMnu : TMenuItem; LoeschenGTxtMnu : TMenuItem; BeendenMmu : TMenuItem;
procedure FormCreate (Sender: TObject); procedure KtxLadenMnuClick (Sender: TObject); procedure KtxSpeichernMnuClick (Sender: TObject); procedure KodierenMnuClick (Sender: TObject); procedure GtxLadenMnuClick (Sender: TObject); procedure GtxSpeichernMnuClick (Sender: TObject); procedure DekodierenMnuClick (Sender: TObject); procedure LoeschenKTxMnuClick (Sender: TObject); procedure LoeschenGTxtMnuClick (Sender: TObject); procedure BeendenMmuClick (Sender: TObject); private procedure DatenAktualisieren(var box : TKryptobox); procedure FensterAktualisieren(box : TKryptobox); end;
var Fenster : TFenster; Kryptobox : TKryptobox;
implementation (* ========================================================================== *) {$R *.DFM}
procedure TFenster.FormCreate (Sender: TObject); (* ---------------------------------------------------------------------------*) begin Kryptobox := TKryptobox.Create; Kryptobox.Init; end;
procedure TFenster.KtxLadenMnuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin with OpenDialog1 do begin Filter := 'Klartextdateien (*.txt) | *.txt'; DefaultExt := 'txt'; if Execute then KlartextMmo.Lines.LoadfromFile(OpenDialog1.FileName); end; end;
procedure TFenster.KtxSpeichernMnuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin with SaveDialog1 do begin Filter := 'Textdateien (*.TXT) | *.TXT'; Options := [ofOverwriteprompt]; if Execute then KlartextMmo.Lines.SaveToFile (FileName); end; end;
procedure TFenster.KodierenMnuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin DatenAktualisieren(Kryptobox); Kryptobox.Verschluesseln; FensterAktualisieren(Kryptobox); end;
procedure TFenster.GtxLadenMnuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin with OpenDialog1 do begin Filter := 'Kryptdateien (*.krp) | *.krp'; DefaultExt := 'krp'; if Execute then GeheimtextMmo.Lines.LoadfromFile (FileName); end; end;
procedure TFenster.GtxSpeichernMnuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin with SaveDialog1 do begin Filter := 'KryptDateien (*.krp) | *.krp'; DefaultExt := 'krp'; Options := [ofOverwriteprompt]; if Execute then GeheimtextMmo.Lines.SaveToFile (FileName); end; end;
procedure TFenster.DekodierenMnuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin DatenAktualisieren (Kryptobox); Kryptobox.Entschluesseln; FensterAktualisieren (Kryptobox); end;
procedure TFenster.LoeschenKTxMnuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin KlartextMmo.Lines.Clear; Kryptobox.SetKlartext(''); end;
procedure TFenster.LoeschenGTxtMnuClick(Sender: TObject); (* ---------------------------------------------------------------------*) begin GeheimtextMmo.Lines.Clear; end;
procedure TFenster.BeendenMmuClick (Sender: TObject); (* ---------------------------------------------------------------------*) begin Fenster.Close; end;
procedure TFenster.DatenAktualisieren (var box : TKryptobox); (* ---------------------------------------------------------------------*) begin box.SetSchluessel (Inputbox('Schlüssel','Bitte Schlüssel eingeben :','')); box.Setklartext (KlartextMmo.Lines.gettext); box.SetGeheimtext (GeheimtextMmo.lines.getText); end;
procedure TFenster.FensterAktualisieren(box : TKryptobox); (* ---------------------------------------------------------------------*) begin KlartextMmo.Clear; GeheimTextMmo.Clear; GeheimtextMmo.lines.Add(box.GetGeheimtext); KlartextMmo.Lines.Add(box.GetKlartext); end;
end.
UNIT uKryptobox; (* ************************************************************************** *) (* *) (* K L A S S E : TKryptobox *) (* -------------------------------------------------------------------------- *) (* Version : 1.X *) (* Autor : Michael Nicolai (Basis Siegfried Spolwig) *) (* *) (* Aufgabe : Einen Text ver- und entschluesseln nach dem CyberKryptoX- *) (* Verfahren *) (* *) (* Compiler : Delphi 4 + addons *) (* *) (* ************************************************************************** *)
INTERFACE (* ========================== Export ======================================== *) uses dialogs, sysutils;
type TKryptobox = class private Klartext, Geheimtext, Schluessel: string; 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;
private function StrEx(start,ende:integer; str: string) :string; function StrVorbehandeln(str : string) :string;
end;
(* -------------------- B e s c h r e i b u n g -------------------------
Oberklasse : - Bezugsklassen : CText benutzte Module: -
Methoden --------
Init Aufgabe: Alle benoetigten Objekte initialisieren vorher : - nachher:
Verschluesseln Aufgabe: Klartext verschluesseln vorher : init. und Klartext existiert. nachher: Text ist chiffriert
Entschluesseln Aufgabe: Geheimtext entschluesseln vorher : init. und Geheimtext existiert. nachher: Text ist dechiffriert
Vorbehandeln; Aufgabe: Rohtextlänge gegebenfalls auf gerade Anzahl erhöhen. vorher : Text ist nicht vorbehandelt. nacher : Originaltext bleibt erhalten und wird geg. nur um ein Leerzeichen ergänzt.
Schluesselcode; Aufgabe: Erzeugen eines Zahlenstrings auf Grundlage des Schluessels. vorher : Schluessel ist vorhanden. nachher: Zahlenstring liegt vor als Schluesselcode.
StrEx; Aufgabe: Extrahieren eines Teilstrings aus einem Quellstring mit Von-Bis- Position. Ausgabe des Teilstrings. Ersetzt die komische SubString- Methode! vorher : Quellstring vorhanden. nacher : Teilstring ist Ergebnis.
Set- und Getmethoden erübrigen sich... ----------------------------------------------------------------------- *)
IMPLEMENTATION (* ========================================================================== *)
constructor TKryptobox.Init; (* -------------------------------------------------------------------------- *) begin Klartext := ''; Geheimtext := ''; Schluessel := ''; 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 Schluessel := s; end;
function TKryptobox.StrEx(Start,Ende : integer; Str: string) :string; (* -------------------------------------------------------------------- *) var StrHilf : string; i : integer; begin Strhilf:=''; for i:=start to Ende do // For Schleife mit von - bis Position begin StrHilf:=StrHilf+Str[i]; // Auslesen des Quellstrings in StrHilf end; result:=StrHilf; end;
function TKryptobox.StrVorbehandeln(str : string) :string; (* -------------------------------------------------------------------- *) var StrLaenge,i : integer; StrHilf : string; begin Strlaenge:= Length(Str); {StrHilf:=''; // Asci Zeichensätze sind überall anders For i:=1 to StrLaenge do // so kommt die Transkryption fehlerhaft begin // zustande, da auch Leerzeichen gelöscht If ord(Str[i])>32 // werden! Then StrHilf:=StrHilf+Str[i]; end; Str:=StrHilf;} If odd(StrLaenge) Then Str:=Str+' '; result:=Str; end;
procedure TKryptobox.Verschluesseln; (* -------------------------------------------------------------------- *) var Str,StrHilf,StrRest : string; Start,Ende,i : integer; begin Geheimtext:=''; Str:=GetKlartext; Str:=Str+Schluessel; // Schlüssel anhängen zum mitverschlüsseln Str:=StrVorbehandeln(Str); // Stringlänge gerade machen Start:=1; Ende:=2; StrHilf:=Str; // Originalstring kopieren
For i:=1 to (length(Str) div 2) do begin
Strhilf:=StrEx(((Ende div 2)+1),Ende,StrHilf)+StrEx(Start,(Ende div 2),StrHilf); {Tauschbefehl nach Beschreibung in Anforderrungsdefinition...}
If i=(length(Str) div 2) // Stringrest wird gesichert Then StrRest:='' Else strRest:=StrEx((Ende+1),length(Str),Str);
Ende:=Ende+2; StrHilf:=StrHilf+StrRest; // Neuer String wird wieder zusammmengeführt end; // Ende For-Schleife Geheimtext :=StrHilf; end;
procedure TKryptobox.Entschluesseln; (* -------------------------------------------------------------------- *) var Str,StrHilf,StrRest,Schluesselcode : string; Start,Ende,i : integer;
begin Str := GetGeheimtext;
Start:=1; Ende:=length(Str); StrHilf:=Str;
For i:=(length(Str) div 2) downto 1 do // Aufdröseln der Kodierung von hinten begin If i=(length(Str) div 2) Then StrRest:='' Else StrRest:=StrEx((Ende+1),length(Str),StrHilf);
Strhilf:=StrEx(((Ende div 2)+1),Ende,StrHilf)+StrEx(Start,(Ende div 2),StrHilf); Ende:=Ende-2;
StrHilf:=StrHilf+StrRest; end; // Ende For-Schleife
Ende:=(Length(StrHilf)); IF StrHilf[Ende]=' ' Then begin StrHilf:=StrEx(1,ende-1,StrHilf); Ende:=Length(StrHilf); end; Schluesselcode:=StrEx(Ende-4,Ende,StrHilf); IF Schluesselcode=Schluessel //Schlüsselabfrage Then Klartext:=StrEx(1,Ende-5,StrHilf) Else KLartext:='Sie sind nicht authorisiert den Text zu entschlüsseln!';
end;
END.