Autor Beitrag
Flamefire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1207
Erhaltene Danke: 31

Win 10
Delphi 2009 Pro, C++ (Visual Studio)
BeitragVerfasst: Di 15.12.09 19:19 
Ich versuche (mal wieder) eine simple RSA-Verschlüsselung zu implementieren (Brauch es als Demo für was anderes)
Lohnt nicht über Sinn und Unsinn zu diskutieren, kenne ich ;-)

Problem: Ich habe mir diese Funktion zum Berechnen des mult. Inversen rausgesucht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
function invers_mod(e,m:Int64):Int64;
var m0,x0,x1,y0,y1,xx,yy,q,r:Int64;
    bpos:Boolean;
begin
  m0:=m; x0:=1; x1:=0; y0:=0; y1:=1; bPos:=true;
  while e <> 0 do Begin
    q:=m div e;
    r:=m mod e;
    m:=e;
    e:=r;
    xx:=x1;
    yy:=y1;
    x1:=q*x1+x0;
    y1:=q*y1+y0;
    x0:=xx;
    y0:=yy;
    bPos:=not bPos;
  End;
  if(bPos) then y0:=-y0;
  if y0 < m then y0:=m0+y0;
  result:=y0;
end;


Iterativ, weil ich Rekursion vermeiden wollte.
Verstehen tu ich die Funktion schon (erweiterter Euklidischer Algo) nur verwirrt mich die vorletzte Anweisung:
if y0 < m then y0:=m0+y0;
warum y0<m?
Ich hätte gesagt, if(y0<0)...

Ist das ein Fehler des Codes, oder habe ich einen Denkfehler?
BTW: Falls jemand eine schönere Funktion hat/kennt, nehme ich auch gerne an. Auch in C (muss es sowieso in C und Delphi schreiben)