Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Multiplikativ Inverses berechnen


detlef-d - Di 07.09.10 15:20
Titel: Multiplikativ Inverses berechnen
http://de.wikipedia.org/wiki/RSA-Kryptosystem#Beispiel

hi ich würde gerne eine rsa verschlüsselung programmieren zur übung, leider weis ich nicht wie ich das Multiplikativ Inverses berechnen kann. also quasi
user defined image

gibt es dafür einen trick?

gruß

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Gammatester - Di 07.09.10 16:11

Warum einen Trick? Weshalb reicht Dir der erweiterte Euklidische Algorithmus wie im Wiki-Beitrag nicht?


yogo - Di 07.09.10 16:38

schau mal weiter unten im beispiel:
http://upload.wikimedia.org/math/5/6/2/562ed638eaf446f294076a996cbf4890.png

für e wählst du einfach eine primzahl(schau aber, ob der Wert der eulerschen Funktion nicht zufällig eine Vielfaches von e ist).
dann must du nur noch d und k ausrechnen. (e=23) * d + k *(φ(N)=120) = 1

das geht mit euklid: http://de.wikipedia.org/wiki/Erweiterter_euklidischer_Algorithmus

der einfachste weg ist dort auf der seite beschrieben: http://de.wikipedia.org/wiki/Erweiterter_euklidischer_Algorithmus#Rekursive_Variante_2
das müsste in delphi etwa so aussehen:(bestimmt keine gute lösung, hier gibt es aber bestimmt viele gute vorschläge, den dort beschriebenen algoritmus umzusetzen)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
type
  TEu = class(Tobject)
    d: integer;
    s: integer;
    t: integer;
    procedure fill(a: integer; b: integer; c: integer);
  end;

procedure TEu.fill(a: integer; b: integer; c: integer);
begin
  d := a;
  s := b;
  t := c;
end;

function euclid(a: integer; b: integer): TEu;
var tmpeu: TEu;
begin
  tmpeu := TEu.Create;
  if b = 0 then 
  begin
    tmpeu.fill(a, 10);
  end else
  begin
    tmpeu := euclid(b, a mod b);
    tmpeu := tmpeu.fill(tmpeu.d, tmpeu.t, tmpeu.s - floor(a / b) * tmpeu.t);
  end;
  result := tmpeu;
end;


hoffe das hilft, yogo