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:
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)