Primzahlen werden ermittelt:
Code:
primzahl[1]:=2; primzahl[2]:=3;
limit:=1000; { Primzahlen bis limit werden erfasst }
zahl:=5;
i:=3;
Repeat
teiler:=3;
realzahl:=zahl;
while ( (zahl MOD teiler) <> 0 ) and ( teiler < sqrt(realzahl) ) do
teiler:=teiler + 2;
If teiler > sqrt(zahl) Then
primzahl[i]:=zahl;
zahl:=zahl + 2;
i:=i + 1;
Until zahl > limit;
Ein gültiger Schlüssel sollte erstellt werden:
Code:
randomize;
repeat
primanzahl:=length(primzahl);
zufall:=random(primanzahl - 1) + 1;
PrimPr1:=primzahl[zufall];
zufall:=random(primanzahl - 1) + 1;
PrimPr2:=primzahl[zufall];
zufall:=random(primanzahl - 1) + 1;
PrimPr3:=primzahl[zufall];
until ( PrimPr1 <> PrimPr2 ) and ( ggt(((PrimPr1 - 1) * (PrimPr2 - 1)), PrimPr3) = 1 );
txtPrimPr1.Text:=IntToStr(PrimPr1);
txtPrimPr2.Text:=IntToStr(PrimPr2);
txtPrimPr3.Text:=IntToStr(PrimPr3);
txtPrimPu1.Text:=IntToStr(PrimPr1 * PrimPr2);
txtPrimPu2.Text:=IntToStr(PrimPr3);
Funktion ggt, um den Größten Gemeinsamen Teiler zu ermitteln:
Code:
function TfrmHaupt.ggt(a, b : LongInt) : LongInt;
var c, Rest : LongInt;
begin
If a < b Then
begin
c:=a;
a:=b;
b:=c;
end;
Rest:= a MOD b;
While Rest <> 0 Do
begin
a:=b;
b:=Rest;
Rest:=a MOD b;
end;
ggt:=b;
end;
Zitat:
Warum liefern diese beiden Routinen nicht immer geeignete Schlüssel für eine RSA-Verschlüsslung und sogar noch oftmals eine 0 als einen der 3 Privaten Schlüssel?
Anm: in txtPrimPr1-3 stehen die 3 Private Keys, ind txtPrimPu1+2 die Public Keys. Die Private Keys sind entscheidend, die Public resultieren daraus.
|
mal was anderes, ein praktisches Problem
