Показать сообщение отдельно
Старый 10.02.2012, 01:48   #12
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Наверное самое трудно переносимое из одного языка в другой =) Потому что используется тут большие числа и в каждом языке разные модули для этого. Конкретно что делает процедура:

Код:
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;
т.е. получается что да, шифруется сразу блок логин + пароль.

Последний раз редактировалось Kilatif, 10.02.2012 в 01:51.
Kilatif вне форума   Ответить с цитированием
За это сообщение Kilatif нажился спасибкой от: