Moin, moin.
Ich habe gerade in der Schule eine Aufgabe bekommen. Das Thema ist Kryptologie.
Dazu sollen wir in Delphi ein Programm schreiben.
Meine Verfahren ist das Blockchiffrierverfahren oder auch Transposition.
Ich habe bereits ein Programm, das mit einem Verschiebungsverfahren arbeitet. Dies soll auf das Blockchiffrierverfahren umgestellt werden.
Der Quelltext ist unten in einem Spoiler, die (meiner Meinung nach wichtigen) Bereiche habe ich farblich markiert.
Die Aufgabe habe ich hier noch einmal:
Theoretisch habe ich das Verfahren verstanden, nur die Umsetzung ist das Problem.
Mein bisheriges Programm läuft mit einem Menu, in dem man Verschlüsseln und Entschlüsseln sowie einen Schlüssel eingeben kann.
(Der Schlüssel soll beim Blockchiffrierverfahren dann für die Blockbreite verwendet werden.)
Es gibt zwei Memo-Felder. In das eine gibt man den Klartext ein, klickt im Menu auf verschlüsseln und erhält dann den Geheimtext. (Ein Screen kann ich auf Wunsch machen.)
Speicher- und Ladefunktionen sind auch mit enthalten, das ist aber eher nebensächlich.
Wäre echt super, wenn mir da jemand helfen kann, am besten mit Erklärung, ich wills auch verstehen^^
Hier ist noch der Quelltext:
Ich habe gerade in der Schule eine Aufgabe bekommen. Das Thema ist Kryptologie.
Dazu sollen wir in Delphi ein Programm schreiben.
Meine Verfahren ist das Blockchiffrierverfahren oder auch Transposition.
Ich habe bereits ein Programm, das mit einem Verschiebungsverfahren arbeitet. Dies soll auf das Blockchiffrierverfahren umgestellt werden.
Der Quelltext ist unten in einem Spoiler, die (meiner Meinung nach wichtigen) Bereiche habe ich farblich markiert.
Die Aufgabe habe ich hier noch einmal:
Ersetzen sie das im Programm benutzte Verfahren durch ein Versetzungsverfahren: das Blockchiffrierverfahren. Der zu verschlüsselnde Text wird als Block mit vorgegebener Breite aufgeschrieben. Danach wird der Text spaltenweise als Geheimtext ausgegeben. Als Beispiel wählen wir: "Delphi hat sich im Unterricht bewährt!" Als Blockbreite wird "9" gewählt.
Wir schreiben den Text als Block...
Delphi h
at sich i
m Unterri
cht bewäh
rt!
...und erhalten als Geheimtext ...
Damcret htl Ut!psn hitb icee hrw rä hiih
Realisieren sie das Verfahren.
Theoretisch habe ich das Verfahren verstanden, nur die Umsetzung ist das Problem.
Mein bisheriges Programm läuft mit einem Menu, in dem man Verschlüsseln und Entschlüsseln sowie einen Schlüssel eingeben kann.
(Der Schlüssel soll beim Blockchiffrierverfahren dann für die Blockbreite verwendet werden.)
Es gibt zwei Memo-Felder. In das eine gibt man den Klartext ein, klickt im Menu auf verschlüsseln und erhält dann den Geheimtext. (Ein Screen kann ich auf Wunsch machen.)
Speicher- und Ladefunktionen sind auch mit enthalten, das ist aber eher nebensächlich.
Wäre echt super, wenn mir da jemand helfen kann, am besten mit Erklärung, ich wills auch verstehen^^
Hier ist noch der Quelltext:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus, StdCtrls;
type
TForm1 = class(TForm)
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
Datei1: TMenuItem;
Kodieren1: TMenuItem;
ffnen1: TMenuItem;
Speichern1: TMenuItem;
Ende1: TMenuItem;
Verschlsseln1: TMenuItem;
Entschlsseln1: TMenuItem;
Codeworteingeben1: TMenuItem;
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Memo1: TMemo;
Panel3: TPanel;
Label2: TLabel;
Memo2: TMemo;
SpeichernGeheimtext1: TMenuItem;
Ende2: TMenuItem;
procedure ffnen1Click(Sender: TObject);
procedure Ende1Click(Sender: TObject);
procedure Speichern1Click(Sender: TObject);
procedure Ende2Click(Sender: TObject);
procedure SpeichernGeheimtext1Click(Sender: TObject);
procedure Verschlsseln1Click(Sender: TObject);
procedure Codeworteingeben1Click(Sender: TObject);
procedure Entschlsseln1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
KTda: boolean;
GTda: boolean;
codewort: string;
implementation
{$R *.DFM}
procedure TForm1.ffnen1Click(Sender: TObject); //Klartext öffnen
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(Opendialog1.Filename);
KTda:=true;
end
end;
procedure TForm1.Ende1Click(Sender: TObject); //Geheimtext öffnen
begin
if OpenDialog1.Execute then
begin
Memo2.Lines.LoadFromFile(Opendialog1.Filename);
KTda:=true;
end
end;
procedure TForm1.Speichern1Click(Sender: TObject); //Klartext speichern
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.Filename);
end;
procedure TForm1.Ende2Click(Sender: TObject); //Programm beenden
begin
halt
end;
procedure TForm1.SpeichernGeheimtext1Click(Sender: TObject); //Geheimtext speichern
begin
if SaveDialog1.Execute then
Memo2.Lines.SaveToFile(SaveDialog1.Filename);
end;
procedure HoleCodewort; //Prozedur Codewort eingeben
begin
Codewort := Inputbox('Eingabe des Hauptschlüssels:','Geben sie das Geheimwort ein.','');
end;
procedure VerschluesseleKlartext; //Prozedur Klartext verschlüsseln
var s,g: String;
i,n,k,verschiebung: integer;
begin
if length(Codewort)=0 then HoleCodewort;
if length(Codewort)=0 then exit;
verschiebung := ord(Codewort[1]) mod 20;
for n := 0 to Form1.Memo1.Lines.Count do
begin
s := Form1.Memo1.Lines[n];
g := '';
for i := 1 to length(s) do
begin
k := (ord(s)+verschiebung) mod 256;
g := g + chr(k);
end;
Form1.Memo2.Lines.Add(g)
end;
end;
procedure TForm1.Verschlsseln1Click(Sender: TObject); //Klartext verschlüsseln Button
begin
KTda := Memo1.Lines.Count > 0;
if KTda then
begin
Memo2.Lines.clear;
GTda := false;
VerschluesseleKlartext;
end
else ShowMessage('Es gibt nichts zum Verschlüsseln.')
end;
procedure TForm1.Codeworteingeben1Click(Sender: TObject); //Codewort eingeben Button
begin
HoleCodewort;
end;
procedure EntschluesselseGeheimtext; //Prozedur Geheimtext entschlüsseln
var s,g: String;
i,n,k,verschiebung: integer;
begin
if length(Codewort)=0 then HoleCodewort;
if length(Codewort)=0 then exit;
verschiebung := ord(Codewort[1]) mod 20;
for n := 0 to Form1.Memo2.Lines.Count do
begin
s := Form1.Memo2.Lines[n];
g := '';
for i := 1 to length(s) do
begin
k := (ord(s)-verschiebung) mod 256;
g := g + chr(k);
end;
Form1.Memo1.Lines.Add(g)
end;
end;
procedure TForm1.Entschlsseln1Click(Sender: TObject); //Geheimtext Entschlüsseln Button
begin
GTda := Memo2.Lines.Count > 0;
if GTda then
begin
Memo1.Lines.clear;
KTda := false;
EntschluesselseGeheimtext;
end
else ShowMessage('Es gibt nichts zum Entschlüsseln.')
end;
Initialization
GTda:=false;
KTda:=false;
codewort:='';
end.
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus, StdCtrls;
type
TForm1 = class(TForm)
SaveDialog1: TSaveDialog;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
Datei1: TMenuItem;
Kodieren1: TMenuItem;
ffnen1: TMenuItem;
Speichern1: TMenuItem;
Ende1: TMenuItem;
Verschlsseln1: TMenuItem;
Entschlsseln1: TMenuItem;
Codeworteingeben1: TMenuItem;
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Memo1: TMemo;
Panel3: TPanel;
Label2: TLabel;
Memo2: TMemo;
SpeichernGeheimtext1: TMenuItem;
Ende2: TMenuItem;
procedure ffnen1Click(Sender: TObject);
procedure Ende1Click(Sender: TObject);
procedure Speichern1Click(Sender: TObject);
procedure Ende2Click(Sender: TObject);
procedure SpeichernGeheimtext1Click(Sender: TObject);
procedure Verschlsseln1Click(Sender: TObject);
procedure Codeworteingeben1Click(Sender: TObject);
procedure Entschlsseln1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
KTda: boolean;
GTda: boolean;
codewort: string;
implementation
{$R *.DFM}
procedure TForm1.ffnen1Click(Sender: TObject); //Klartext öffnen
begin
if OpenDialog1.Execute then
begin
Memo1.Lines.LoadFromFile(Opendialog1.Filename);
KTda:=true;
end
end;
procedure TForm1.Ende1Click(Sender: TObject); //Geheimtext öffnen
begin
if OpenDialog1.Execute then
begin
Memo2.Lines.LoadFromFile(Opendialog1.Filename);
KTda:=true;
end
end;
procedure TForm1.Speichern1Click(Sender: TObject); //Klartext speichern
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.Filename);
end;
procedure TForm1.Ende2Click(Sender: TObject); //Programm beenden
begin
halt
end;
procedure TForm1.SpeichernGeheimtext1Click(Sender: TObject); //Geheimtext speichern
begin
if SaveDialog1.Execute then
Memo2.Lines.SaveToFile(SaveDialog1.Filename);
end;
procedure HoleCodewort; //Prozedur Codewort eingeben
begin
Codewort := Inputbox('Eingabe des Hauptschlüssels:','Geben sie das Geheimwort ein.','');
end;
procedure VerschluesseleKlartext; //Prozedur Klartext verschlüsseln
var s,g: String;
i,n,k,verschiebung: integer;
begin
if length(Codewort)=0 then HoleCodewort;
if length(Codewort)=0 then exit;
verschiebung := ord(Codewort[1]) mod 20;
for n := 0 to Form1.Memo1.Lines.Count do
begin
s := Form1.Memo1.Lines[n];
g := '';
for i := 1 to length(s) do
begin
k := (ord(s)+verschiebung) mod 256;
g := g + chr(k);
end;
Form1.Memo2.Lines.Add(g)
end;
end;
procedure TForm1.Verschlsseln1Click(Sender: TObject); //Klartext verschlüsseln Button
begin
KTda := Memo1.Lines.Count > 0;
if KTda then
begin
Memo2.Lines.clear;
GTda := false;
VerschluesseleKlartext;
end
else ShowMessage('Es gibt nichts zum Verschlüsseln.')
end;
procedure TForm1.Codeworteingeben1Click(Sender: TObject); //Codewort eingeben Button
begin
HoleCodewort;
end;
procedure EntschluesselseGeheimtext; //Prozedur Geheimtext entschlüsseln
var s,g: String;
i,n,k,verschiebung: integer;
begin
if length(Codewort)=0 then HoleCodewort;
if length(Codewort)=0 then exit;
verschiebung := ord(Codewort[1]) mod 20;
for n := 0 to Form1.Memo2.Lines.Count do
begin
s := Form1.Memo2.Lines[n];
g := '';
for i := 1 to length(s) do
begin
k := (ord(s)-verschiebung) mod 256;
g := g + chr(k);
end;
Form1.Memo1.Lines.Add(g)
end;
end;
procedure TForm1.Entschlsseln1Click(Sender: TObject); //Geheimtext Entschlüsseln Button
begin
GTda := Memo2.Lines.Count > 0;
if GTda then
begin
Memo1.Lines.clear;
KTda := false;
EntschluesselseGeheimtext;
end
else ShowMessage('Es gibt nichts zum Entschlüsseln.')
end;
Initialization
GTda:=false;
KTda:=false;
codewort:='';
end.