4 / 2 / 0
Регистрация: 23.02.2014
Сообщений: 133
1

RSA шифрование по публичному ключу

03.06.2015, 19:14. Показов 2291. Ответов 1
Метки нет (Все метки)

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

RSACALC:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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) Публичный ключ: "DE2C23F5B87C4535CF1241B85ED5DC9C97E2E2A9C411B93F4 17718D92D4F0294A37A36E8FF1C346FCB56426405F0CEB59C6 BA21EC5C70
F046930B800E830091F62F7B76252458FAB026A0F8ACF59246 203EFCA254C057C55A648385A9E27D29BD0F83802C1C550918 84A048E34DBEF316B0AF9B2199CE2
B6C81F258F45E8944CB0F122B4BF2757BD881CE967EC7B5346 F7469E8C8F7FE0AAEDBC9B7B3001886B6D50641961F5CF0D16 0BD5E7D1BF55D1BAFF8908025773
4D06C171AE3AD69708ACBA119AE5D1DDF1199784170FCF586E 982ADB502057C4910ED6FB52E26CF137B247DB47A9486140B8 BF385113C4578D0749E254E19062
CBE4139E09FBE60775"
2) Публичный экспонент: "010001"

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

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

Delphi
1
2
3
4
5
authkey = 'DE2C23F5B87C4535CF1241B85ED5DC9C97E2E2A9C411B93F417718D92D4F0294A37A36E8FF1C346FCB56426405F0CEB59C6BA21EC5C70F046930B800E830091F62F7B76252458FAB026A0F8ACF59246203EFCA254C057C55A648385A9E27D29BD0F83802C1C55091884A048E34DBEF316B0AF9B2199CE2B6C81F258F45E8944CB0F122B4BF2757BD881CE967EC7B5346F7469E8C8F7FE0AAEDBC9B7B3001886B6D50641961F5CF0D160BD5E7D1BF55D1BAFF89080257734D06C171AE3AD69708ACBA119AE5D1DDF1199784170FCF586E982ADB502057C4910ED6FB52E26CF137B247DB47A9486140B8BF385113C4578D0749E254E19062CBE4139E09FBE60775';
kexp:='010001';
Base256StringToFGInt(authkey,authkeys);//BASE 256
Base10StringToFGInt(kexp,kexps);//binary
rsaencrypt('password_here', authkeys, kexps, passw);
В результате получаются пустые кубики и другие непонятные иероглифы.

Нашёл в интернете функцию:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function RSAEncrypt(Source: String; Key: RawByteString): RawByteString;
var
  KeyPair: TStringStream;
  RSA: HCRYPTPROV;
  HPair: HCRYPTKEY;
  DDataSize, EDataSize: DWORD;
 
begin
  Result := '';
  KeyPair := TStringStream.Create(Key);
  if CryptAcquireContext(@RSA, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT) then
  try
    if CryptImportKey(RSA, PByte(KeyPair.Memory), KeyPair.Size, 0, 0, @HPair) then
    try
      EDataSize := SizeOf(Source);
      if CryptEncrypt(HPair, 0, true, 0, nil, @EDataSize, 0) then
      begin
        Result := Source;
        SetLength(Result, EDataSize);
        DDataSize := Length(Source) * SizeOf(Char);
        if not(CryptEncrypt(HPair, 0, True, 0, PByte(PChar(Result)), @DDataSize, EDataSize)) then
          Result := '';
      end;
    finally
      CryptDestroyKey(HPair);
    end;
  finally
  CryptReleaseContext(RSA, 0);
  end;
  FreeAndNil(KeyPair);
end;
В результате вообще ничего не выводится, т.е не работает функция.

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

Добавлено через 1 час 58 минут
Вверх!

Добавлено через 1 час 15 минут
Кто-нибудь в состоянии помочь?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2015, 19:14
Ответы с готовыми решениями:

RSA шифрование
Привет Программерам, у меня вопрос есть программа которая шифрует и дешифрует методом РСА , но дело...

rsa шифрование
нашел исходники- http://plagiata.net.ru/?p=140 но не разберусь. как присваивать свои ключи?

Шифрование RSA
Имеется 1 публичный ключ и текст. Нужно зашифровать текст по методу RSA Добавлено через 20 минут...

Шифрование алгоритмом RSA
Задается исходная строка и надо зашифровать её по алгоритму RSA Для работы с большими числами...

1
0 / 0 / 0
Регистрация: 25.01.2016
Сообщений: 14
08.12.2016, 19:28 2
тоже интересует помощь

Добавлено через 21 секунду
можно конечно в потоке через синхронизацию но это убого + иногда не проходит
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2016, 19:28
Помогаю со студенческими работами здесь

Шифрование текста в RSA
Есть ли какие нибудь статьи для новичков? Исходник есть но в нем я ничего не понял: function...

RSA шифрование
Пытаюсь авторизоваться в стиме, получаю модуль и экспоненту : модуль:...

Шифрование RSA
Здравствуйте. У меня есть проблема с шифрованием RSA. Данная программа лишь шифрует (точнее...

RSA шифрование
Всем привет , не могу никак пройти авторизацию в стиме. Там нужно: Получить экспоненты RSA и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru