Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.02.12;
Скачать: CL | DM;

Вниз

RSA шифрование по публичному ключу   Найти похожие ветки 

 
raduga15   (2015-06-03 16:04) [0]

Пытаюсь авторизоваться в Steam. Раньше я использовал модуль "rsacalc"

RSACALC:
procedure TRSACalculator.Calculate(const Plaintext,Modulus: ANSIString;  var Ciphertext: ANSIString);
var i:integer;
begin
 i:=0;
 while busy do begin
   inc(i);
   if i>1000 then exit;
   sleep(50);
   Application.ProcessMessages;
 end;
 //
 Password.setAttribute("value",Plaintext,0);    
 ModulusE.setAttribute("value",Modulus,0);
 web.RunJS("Go();");
 Ciphertext:=CiphertextE.getAttribute("value",0);
end;

constructor TRSACalculator.Create(form: TForm);
begin
 busy:=true;
 p:=TPanel.Create(Form);
 p.Parent:=Form;
 web:=TWebBrowser.Create(p);
 web.Visible:=false;
 TWinControl(web).Parent:=p;
 p.Height:=0;
 p.Width:=0;
 web.OnDocumentComplete:=self.WebDocumentComplete;
 web.OnBeforeNavigate2:=self.WebNavigate2;
 web.Navigate(iniName);

end;

Всё прекрасно работало и до сих пор работает, но нужно сделать авторизацию непосредственно в потоке. А модуль "rsacalc" уже там не работает.

От сервера Steam я получаю:

1) Публичный ключ: "DE2C23F5B87C4535CF1241B85ED5DC9C97E2E2A9C411B93F417718D92D4F0294A37A36E8FF1C346 FCB56426405F0CEB59C6BA21EC5C70
F046930B800E830091F62F7B76252458FAB026A0F8ACF59246203EFCA254C057C55A648385A9E27D 29BD0F83802C1C55091884A048E34DBEF316B0AF9B2199CE2
B6C81F258F45E8944CB0F122B4BF2757BD881CE967EC7B5346F7469E8C8F7FE0AAEDBC9B7B300188 6B6D50641961F5CF0D160BD5E7D1BF55D1BAFF8908025773
4D06C171AE3AD69708ACBA119AE5D1DDF1199784170FCF586E982ADB502057C4910ED6FB52E26CF1 37B247DB47A9486140B8BF385113C4578D0749E254E19062
CBE4139E09FBE60775"
2) Публичный экспонент: "010001"

Нужно зашифровать пароль методом RSA и в результате должно получиться что-то вроде этого: http://www.sources.ru/csharp/RSACryptoPad.png

Попытки использования:
Пробовал использовать FGINT

authkey = "DE2C23F5B87C4535CF1241B85ED5DC9C97E2E2A9C411B93F417718D92D4F0294A37A36E8FF1C346 FCB56426405F0CEB59C6BA21EC5C70F046930B800E830091F62F7B76252458FAB026A0F8ACF59246 203EFCA254C057C55A648385A9E27D29BD0F83802C1C55091884A048E34DBEF316B0AF9B2199CE2B 6C81F258F45E8944CB0F122B4BF2757BD881CE967EC7B5346F7469E8C8F7FE0AAEDBC9B7B3001886 B6D50641961F5CF0D160BD5E7D1BF55D1BAFF89080257734D06C171AE3AD69708ACBA119AE5D1DDF 1199784170FCF586E982ADB502057C4910ED6FB52E26CF137B247DB47A9486140B8BF385113C4578 D0749E254E19062CBE4139E09FBE60775";
kexp:="010001";
Base256StringToFGInt(authkey,authkeys);//BASE 256
Base10StringToFGInt(kexp,kexps);//binary
rsaencrypt("password_here", authkeys, kexps, passw);


В результате получаются пустые кубики и другие непонятные иероглифы.

Пытаюсь сделать так:

function Bit(Value, n: Integer): Boolean;
asm
  bt eax, edx
  setc al
  and eax, 0FFh
end;

//Функция быcтрого возведения в степень
function FastPower(a, b, n: integer): integer;
var i: integer;
   ai: extended;
begin
 ai := a;
 for I := Trunc(log2(b)) - 1 downto 0 do
 if Bit(b, i) then ai := Round(sqr(ai) * a) mod n else ai := Round(sqr(ai)) mod n;
 result := Round(ai);
end;

function Encrypt(s: string; e, n: integer): TIncodeMes;
 var I: Integer;
begin
 SetLength(result, length(s));
 for I := 0 to Length(s) - 1 do
   result[i] := FastPower(ord(s[i + 1]), e, n)
end;

n := StrToIntDef(Edit3.Text, strtoint(edit3.text)); //n=Публичный экспонент:
e := StrToIntDef(Edit2.Text, strtoint(Edit2.Text));//e=Публичный ключ:
FMes := Encrypt(Memo1.Lines.Text, e, n);


Происходит ошибка при конвертирование e. "Публичный ключ" (здесь написан сам ключ) is not a valid integer value

Буду рад любому совету, а ещё больше сделанной функции


 
кгшзх ©   (2015-06-03 17:51) [1]

а что это за ересь?

e := StrToIntDef(Edit2.Text, strtoint(Edit2.Text));

преобразовать строку из эдит2 в интегер, а если не получилось, то все равно преобразовать строку из эдит2 в интегер.


 
кгшзх ©   (2015-06-03 18:02) [2]

Ну и конечно

ShowMessage("В интегер число влезает только " + IntToStr(SizeOf(integer)) + " байт ;   в то время как я пытаюсь запихать туда " + IntToStr(Length(Edit2.text) div 2) + " байт");



Страницы: 1 вся ветка

Текущий архив: 2017.02.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
2-1433138949
Anthony68
2015-06-01 09:09
2017.02.12
Функциональная кнопка на тачскрине Windows 8


2-1433331962
guest
2015-06-03 14:46
2017.02.12
интерактивность сервиса на лету...


2-1433336659
raduga15
2015-06-03 16:04
2017.02.12
RSA шифрование по публичному ключу


3-1311924368
yurikon
2011-07-29 11:26
2017.02.12
Обратиться к датасету через имя


2-1433840145
pavelnk
2015-06-09 11:55
2017.02.12
Как переместить форму