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.