Наверное самое трудно переносимое из одного языка в другой =) Потому что используется тут большие числа и в каждом языке разные модули для этого. Конкретно что делает процедура:
Код:
function RSAEncrypt(a,p,rsakey:string):string;
var
sD,sR,sM:string;
m,e,d,r:TFGInt; //это переменные для работы с большими числами
begin
if length(a)>14 then setlength(a,14); //если логин > 14 символов обрезаем
while length(a)<14 do a:=a+#0; //доводим логин до 14 символов
if length(p)>16 then setlength(p,16); //если пароль > 16 символов, обрезаем
while length(p)<16 do p:=p+#0; //доводим пароль до 16 символов
sD:=a+p+#0#0#0#0; //записывается логин+пароль+4 нулевых байт для нужного размера
sM:=rsakey;
Base10StringToFGInt('65537',e); //инициализируем e числом 65537
Base256StringToFGInt(sD,d); //инициализируем d "числом" sD
Base256StringToFGInt(sM,m); //аналогично
FGIntMontgomeryModExp(d,e,m,r); //выполняется операция r = (d^e) mod m
FGIntToBase256String(r,sR); //переводится r в sR
result:=sR; //PROFIT
end;
т.е. получается что да, шифруется сразу блок логин + пароль.