Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2017.02.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





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


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


15-1456748233
Dmk
2016-02-29 15:17
2017.02.12
Win 10


15-1457472038
Kilkennycat
2016-03-09 00:20
2017.02.12
Что делает эта штуковина?


1-1348219869
Дмитрий Белькевич
2012-09-21 13:31
2017.02.12
Замена Vista-style dialogs TTaskDialog





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский