Registriert seit: 24. Nov 2007
36 Beiträge
|
Re: RSA Hilfe
28. Nov 2007, 19:51
Hallo,
bei mir kommt ein Exception-Fehler der Klasse Iinteger, wenn ich mit RSA wieder entschlüsseln will (und den geheimen Schlüssel d über den euklidischen Algorithmus ermittele). Und zwar "Iinteger division by zero", welches auf die Zeile u:=v0; zeigt. Welche Division meint der Compiler? Die nmod zwei Zeilen darüber oder ndiv zwei Zeilen darunter? Ich weiß auch nicht warum dort etwas null sein sollte. Diese Fehlermeldung macht mich noch fertig.
Code:
function tform1.invers_mod(e,o: iinteger): iinteger;
var d,v: iinteger;
begin
nrnd(d,4048);
nrnd(v,4048);
ggTerw(e,o,d,v); //der Funktionswert von ggT wird nicht benötigt
if ncmp(d,z) < 0 then nadd(d,o);
result := d;
end;
Function tform1.ggTerw(a,b: iinteger; var u,v: iinteger):iinteger;
var u0, v0,z1,z2:iinteger;
begin
nrnd(z1,4048);
nrnd(z2,4048);
if b = z then Begin
nset(result,a);
nset(result,1);
nset(v,0);
End else Begin
nmod(a,b);
result := ggTerw(b, a, u0, v0);//rekursiv
u := v0; //Hier zeigt der Pfeil hin, wenn das Programm abkracht.
a := z2;
ndiv(z2,b);
nmul(z2,v0);
nsub(v,u0,z2); // v := u0 - (a div b)*v0;
End;
end;
Kann mir jemand sagen wo der Fehler liegt?
Edit: Ach, anscheinend liegt es an ndiv, ich habe den Fehler gefunden; falsch verglichen.
|
|
Zitat
|