Autor Beitrag
detlef-d
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 07.09.10 15:20 
de.wikipedia.org/wik...ryptosystem#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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Di 07.09.10 16:11 
Warum einen Trick? Weshalb reicht Dir der erweiterte Euklidische Algorithmus wie im Wiki-Beitrag nicht?
yogo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 121

Windowse, Linuxe
Delphi 3 Prof., D5 Enterprise, D6 Enterprise, Kylix, Delphi 2010
BeitragVerfasst: Di 07.09.10 16:38 
schau mal weiter unten im beispiel:
upload.wikimedia.org...94076a996cbf4890.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: de.wikipedia.org/wik...idischer_Algorithmus

der einfachste weg ist dort auf der seite beschrieben: de.wikipedia.org/wik...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)

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