Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.02.2010, 13:57
PalychXX PalychXX вне форума
Прохожий
 
Регистрация: 15.02.2010
Сообщения: 3
Репутация: 10
По умолчанию RSA в Delphi без использования CryptoAPI

Необходимо в написанной на Delphi программе расшифровать данные, созданные примерно таким PHP скриптом (шифрование RSA):
PHP код:
<?php
//p = 188288305366551045875753352495858023267
//q = 337158732374377141246436733614999751083
//n = 63483046358305983334008322410213375860915324927289212462812907808713422448161
//d = 53743034420103765853770572669989121553439102166954208710164177785895674665045
//e = 100001
//keysize=256
//numberbase=10
include('rsa.class.php');
$RSA = new RSA();
$keys $RSA->generate_keys ('188288305366551045875753352495858023267''337158732374377141246436733614999751083'0);
$data $_GET['data']; //получаем данные
$result base64_encode($RSA->encrypt($data$keys[2], $keys[0], 3)); //шифруем их закрытым ключом и переводим в Base64
echo $result//печатаем
Т.е. имеется строка, раскодировать ее из Base64, не проблема, а вот как дальше расшифровать открытым ключом?

Пробовал FGIntRSA (ключи здесь другие, но это не суть важно):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var n, d: TFGInt; s:String;
begin
Base10StringToFGInt('67401359173339782011194938778692639955063938432046750146042650627000811678529',n);
Base10StringToFGInt('36292881332193838097457286640543274354269423398959669692730220735295395665845',d);
s:=Memo1.Text;
RSAEncrypt(s, d, n, s);
s:=EncodeBase64(s); 
//ConvertBase256to64(s,s);
Memo1.Text:=s;
end;

procedure TForm1.Button2Click(Sender: TObject);
var n, e, nilgInt: TFGInt; s:String;
begin
Base10StringToFGInt('67401359173339782011194938778692639955063938432046750146042650627000811678529',n);
Base10StringToFGInt('10001',e);
FGIntDestroy(nilGInt);
s:=Memo1.Text;
s:=DecodeBase64(s);
//ConvertBase64to256(s,s);
RSADecrypt(s, e, n, Nilgint, Nilgint, Nilgint, Nilgint, s);
Memo1.Text:=s;
end;
На входе '12345', в зашифрованном виде в Base64 это 'kLs3dQs5tWuFzVQHxGPLGWIr0kYGQBf7PLOLG//5CP8=', после расшифровки получаю ' Вф}Y©Eр8Џ’Ѕ ІАnг=3}ЅбCd8[Э†]'.
Числа для ключей генерил через RSA Tool. На каком-то форуме читал, что в FGIntRSA к данным добавляется строка '111', из за нее расхождение со стандартами, только я пока не понял, как ее убрать и сохранить работоспособность модуля.
Также пробовал компоненты tplockbox. Там аналогичная шняга - если генерировать E, N и D средствами самого модуля все работает (генерил ключи утилитой из примеров для этого компонента), но на такие числа RSA Tool матерится (не выполняется условие для E). При использовании чисел из RSA Tool дебет с кредитом снова не сходится, скрестить PHP и сэтим компонентом навряд ли получится.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter