unit mRsa;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, math;
type
TForm1 =
class(TForm)
MemoKlartext: TMemo;
MemoGeheimtext: TMemo;
Edp: TEdit;
Label1: TLabel;
Label2: TLabel;
Edq: TEdit;
Berechnenbutton: TButton;
edn: TEdit;
Label3: TLabel;
ede: TEdit;
edd: TEdit;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
MainMenu1: TMainMenu;
Klartext1: TMenuItem;
Geheimtext1: TMenuItem;
Schlssel1: TMenuItem;
Beenden1: TMenuItem;
Kodierenbutton: TButton;
Dekodierenbutton: TButton;
Beenden2: TMenuItem;
Erzeugen1: TMenuItem;
Lschen1: TMenuItem;
Lschen2: TMenuItem;
Kodieren1: TMenuItem;
Kodieren2: TMenuItem;
Hilfe1: TMenuItem;
Anleitung1: TMenuItem;
procedure Beenden2Click(Sender: TObject);
procedure BerechnenbuttonClick(Sender: TObject);
function ggt(a,b:integer):integer;
procedure Erzeugen1Click(Sender: TObject);
procedure KodierenbuttonClick(Sender: TObject);
procedure Lschen1Click(Sender: TObject);
procedure DekodierenbuttonClick(Sender: TObject);
procedure Lschen2Click(Sender: TObject);
procedure Kodieren1Click(Sender: TObject);
procedure Kodieren2Click(Sender: TObject);
procedure Anleitung1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
p,q,n,e,d,blocklaenge: integer;
zeile,cstring:
string;
implementation
{$R *.dfm}
procedure TForm1.Beenden2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.BerechnenbuttonClick(Sender: TObject);
var teilerfremd,i:integer;
begin
if TryStrToInt(edp.text, i)
then
if TryStrToInt(edq.text, i)
then
begin
p:=strtoint(edp.Text);
q:=strtoint(edq.Text);
n:=p*q;
edn.Text:=inttostr(n);
teilerfremd:=0;
e:=2;
while teilerfremd<>1
do begin
e:=e+1;
teilerfremd:=ggt(e,((p-1)*(q-1)));
if teilerfremd=1
then ede.Text:=inttostr(e);
end;
d:=e
mod((p-1)*(q-1));
edd.Text:=inttostr(d);
end else begin
showMessage('
Bitte Primzahlen in die Felder p und q eingeben!');
end;
end;
function tform1.ggt(a,b:integer):integer;
var r:integer;
begin
while b > 0
do
begin
r := a
mod b;
a := b;
b := r;
result:=a;
end;
end;
procedure TForm1.Erzeugen1Click(Sender: TObject);
begin
self.BerechnenbuttonClick(sender);
end;
procedure TForm1.KodierenbuttonClick(Sender: TObject);
var i,j,f,g,code:integer;m,c:
string;
begin
delete(zeile,1,length(zeile));
memogeheimtext.Lines.clear ;
for i:=0
to memoklartext.lines.count
do //Umwandlung in ASCII-CODE
for j:=1
to length(memoklartext.lines[i])
do
begin
zeile := zeile + inttostr(ord(memoklartext.lines[i][j]));
end;
blocklaenge:=length(edn.Text)-1;
//Kodierung
repeat
begin
m:= Copy(zeile, 1, blocklaenge);
Delete(zeile, 1, blocklaenge);
f:=strtoint(m);
g:=strtoint(m);
for i:=2
to strtoint(ede.Text)
do //Rechnung
begin
g:=g*f;
end;
code:=g
mod strtoint(edn.Text);
c:=concat(c,inttostr(code),'
');
end;
until ( zeile = '
' );
c:=concat(c,'
.');
memogeheimtext.Lines.Clear;
memogeheimtext.Lines.add(c);
end;
procedure TForm1.Lschen1Click(Sender: TObject);
begin
memogeheimtext.Lines.Clear;
end;
procedure TForm1.DekodierenbuttonClick(Sender: TObject);
var i,j,f,g,m:integer;code,Msg:
string;
begin
delete(msg,1,length(zeile));
//Dekodierung
memoklartext.Lines.clear ;
cstring:=memogeheimtext.Lines.Text;
while not (cstring='
')
or not (cstring='
.')
or not (cstring='
')
do
begin
code:=copy(cstring,1,pos('
',cstring)-1);
delete(cstring,1,length(code)+1);
if not (code='
')
then begin
f:=strtoint(code);
g:=strtoint(code);
for i:=2
to strtoint(edd.Text)
do
begin
g:=g*f;
end;
m:=g
mod strtoint(edn.Text);
Msg:=concat(msg,inttostr(m));
end
else begin memoklartext.Lines.add(msg);exit;
//Durch ASCII CODE in Buchstaben
delete(msg,1,length(msg));
for i:=0
to memoklartext.lines.count
do
for j:=1
to length(memoklartext.lines[i])
do
begin
msg := msg + char(memoklartext.lines[i][j]);
end;
end;
end;
memoklartext.Lines.Clear;
memoklartext.Lines.add(msg)
end;
procedure TForm1.Lschen2Click(Sender: TObject);
begin
memoklartext.Lines.Clear;
end;
procedure TForm1.Kodieren1Click(Sender: TObject);
begin
self.KodierenbuttonClick(sender);
end;
procedure TForm1.Kodieren2Click(Sender: TObject);
begin
self.DekodierenbuttonClick(sender);
end;
procedure TForm1.Anleitung1Click(Sender: TObject);
begin
showmessage('
Als erstes setzt man die Primzahlen p und q ein');
showmessage('
Dann erzeugt man den Schlüssel mit dem Button "Schlüssel erzeugen"');
showmessage('
Um nun eine Nachricht zu verschlüsseln fügt man je nach dem den Text in das Klartextfeld bzw. in das Geheimtextfeld und wählt je nach Wunsch Kodieren oder Dekodieren');
end;
end.