Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 13:59   #1
PalychXX
Новичок
Джуниор
 
Регистрация: 15.02.2010
Сообщений: 2
По умолчанию 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 это 'kLs3dQs5tWuFzVQHxGPLGWIr0kYGQBf7PL OLG//5CP8=', после расшифровки получаю ' Вф}Y©Eр8Џ’Ѕ ІАnг=3}ЅбCd8[Э†]'.
Числа для ключей генерил через RSA Tool. На каком-то форуме читал, что в FGIntRSA к данным добавляется строка '111', из за нее расхождение со стандартами, только я пока не понял, как ее убрать и сохранить работоспособность модуля.
Также пробовал компоненты tplockbox. Там аналогичная шняга - если генерировать E, N и D средствами самого модуля все работает (генерил ключи утилитой из примеров для этого компонента), но на такие числа RSA Tool матерится (не выполняется условие для E). При использовании чисел из RSA Tool дебет с кредитом снова не сходится, скрестить PHP и сэтим компонентом навряд ли получится.
PalychXX вне форума Ответить с цитированием
Старый 26.11.2010, 03:03   #2
fize
Форумчанин
 
Регистрация: 24.11.2009
Сообщений: 155
По умолчанию

PalychXX ты разобрался с этим вопросом? я убрал 111 но все равно ключи не подходят
fize вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
тулбар без использования файлов ресурсов Loginanton Win Api 0 02.11.2009 21:28
Имя mp3 файла без использования Bass Дима я Мультимедиа в Delphi 7 28.07.2009 12:24
Создание проекта без использования БД swiks PHP 7 17.06.2009 13:24
Сохранить контакты с телефона на ПК, без использования Outlook'a Mikhail Bakurov Свободное общение 1 03.05.2009 18:06
вывод текста без использования библиотек? ddos Общие вопросы C/C++ 0 08.11.2008 21:47