Hallo,
im Prinzip sollte RSA so laufen.
Problem dabei ist, es kommen dabei sehr große Zahlen
ins Spiel. Da reicht int64 nicht mehr.
Hier im Forum gibt es einige Beispiele mit BigInt.
Diese Typen wären dazu eher geeignet.
Grüße
Klaus
Delphi-Quellcode:
{
RSA : p=7 q=11
p * q = 77 = N
phi(N) = (p-1)* (q-1) = 60
e teilerfremd zu phi(N) = 23
-> e=23 und N=77 public Key
wird zum Verschlüsseln benötigt
Berechnung der inversersen zu e
e* d +k * phi(N) ? 1 = ggT(e,phi(N))
23 * d + k * 60 = 1 = ggT(23,60)
23 * 47 + (-18) * 60 = 1
-> d = 47 N=77 -> privater Schlüssel
}
// für power die math unit einbinden
procedure tcodiermaschine.verschluesseln;
var i, acode : integer;
begin
// Klartext zu ASCII
for i := 1
to length (klartext)
do
begin
// 1 ASCII- Code der i-ten Buchstaben ermitteln
acode := ord(Klartext[i]);
// 2 Durch formel ( C = M^e mod N ) verschlüsseln
acode := round(power(acode,23))
mod 77;
// 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen
codetext[i] := chr(acode);
end;
end;
procedure tcodiermaschine.entschluesseln;
var i : integer;
var acode : int64;
begin
// Klartext zu ASCII
for i := 1
to length (klartext)
do
begin
// 1 ASCII- Code der i-ten Buchstaben ermitteln
acode := ord(codetext[i]);
// 2 Durch formel ( M = C^d mod N ) verschlüsseln
acode := round(power(acode,47))
mod 77;
// 3 Das Zweichen mit dem ASCII- Code acode an der i-ten Stelle im chiffre ablegen
klartext[i] := chr(acode);
end;
end;