//global:
d,p,q,phi,n,
dp,dq,qinv:ansistring;
//chin RS
function tform1.GGT(n, m: ansistring): ansistring;
var mathe:tmathe;
begin
mathe:=tmathe.Create;
if m = '
0'
then Result := n
else Result := ggt(m, mathe.Modulo(n,m));
end;
function tform1.rsadec(text:ansistring;d,n:ansistring):ansistring;
var textneu:ansistring;
i:int64;
wa,z1,z2,z3,m_1,m_2,m,h:ansistring;
mathe:tmathe;
begin
textneu:='
';
result:='
';
m_1:='
0';
m_2:='
0';
m:='
0';
h:='
0';
mathe:=tmathe.Create;
i:=1;
while i<=length(text)
do
begin
application.ProcessMessages;
wa:=copy(text,i,length(n));
//wa:=mathe.PotenzModulo(wa,d,n);
{
m_1 = c^dp mod p and m_2 = c^dq mod q
h = (m_1 - m_2) * qInv mod p
m= m_2 + q * h
}
m_1:=mathe.PotenzModulo(wa,
dp,p);
m_2:=mathe.PotenzModulo(wa,dq,q);
h:=mathe.Differenz(m_1,m_2);
h:=mathe.modulo(h,p);
h:=mathe.ProduktModulo(h,qinv,p);
m:=mathe.summe(m_2,mathe.Produkt(q,h));
wa:=m;
textneu:=textneu+chr(strtoint(mathe.Quotient(wa,'
256')))+chr(strtoint(mathe.Modulo(wa,'
256')));
i:=i+length(n)
end;
result:=textneu;
end;