Einzelnen Beitrag anzeigen

w-a-n-n-a-b-e

Registriert seit: 28. Jan 2006
9 Beiträge
 
#1

Brauche Hilfe dringend... Verschlüsselungsproggi mit RSA

  Alt 11. Mär 2006, 13:11
Hallo Leute.. ich bastle schon die ganzen Tage an meinem Verschlüsselungsprogramm.
Also Mein Delphi Programm ist wie folgt aufgebaut:

Ein Bereich für die Berechnung des Schlüssels

Ein KlartextMemofeld
und ein Geheimtextmemofeld.


Um nun zu verschlüsseln muss man zunächst den Klartext in Zahlen umwandeln (ord).
Dann muss man nun diese große Zahl in Blöcke unterteilen.
Die Blocklänge(m)=Blocklänge(vom Schlüssel n)-1

Nun muss man jeweils mit den einzelnen Blöcken rechnen.(siehe Rechnung)
Es werden alle einzelnen Blöcke berechnet und als Geheimtext in Geheimtext Memo eingefügt

Bisher hat alles soweit auch gut geklappt.
Habe also als test: p und q genommen und die werte 7 und 5 übergeben
Bei [groß]A folgt das Ergebnis 610 was auch richtig ist..
Wenn ich dies nun dekodiere bekomme ich den Wert 65 (ASCII Wert für A).
Auch richtig also.. Nun muss im Klartextfeld wieder A stehen statt 65..
Aber die Umwandlung funktioniert irgendwie nicht..


Doch was mir später nochmal eingefallen ist, dass ich halt das Programm immer nur mit dem Buchstaben A ausprobiert habe und keinen Satz probiert habe.. wie zb. 'Hallo wie gehts?'

Ich hab nun solange an dem Programm rumgebastelt und wurde teilweise überfüllt von Fehlern (das ist auch warum die Unit so chaotisch ist ) ... und war so verzweifelt, dass ich irgendwann nur noch stumpf auf den Bildschirm geguckt hab

Nun ja irgendwann geht einem die Geduld aus und man kann nicht mehr.. naja würd mich freuen, wenn ihr mir helfen könntet... dies sollte eigentlich bis Montag fertig sein.. und als Anlage zu meiner Facharbeit dienen.. aber ich glaub alleine schaff ich das nicht mehr..

Ich danke allen im Voraus und würd mich wirklich dolle über eure Hilfe freuen


Delphi-Quellcode:
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.
Angehängte Dateien
Dateityp: pas mrsa_646.pas (5,1 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat