Blo0DeX, что делает приведенная функция я не знаю но точно не шифрует по RSA 1024битным ключем
для реализации этого шифрования советую использовать библиотеку GMP, в нете есть примеры реализации РСА с её помощью, саму библиотеку лучше брать в виде libgmp-3.dll файла ибо там точно всё что надо экспортируется (она кстати в l2encdec используется)
ЗЫ очень быстрая либаб у меня с ней шифрование логина с паролем происходит в 20 раз быстрее чем если юзать FGInt модуль для дельфиб причем и работает всегда правильно в отличии от всё того же FGInt
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor, насколько я понял В используется только для обозначения длины ключа...
Про GMP я уже читал и на этом форуме и на олчитс, но не мог никак выбрать нужные мне функции, в итоге скачал исходники GMP и там уже все нашел.
mpz_inp_str(dest_integer, stream, base) -- Input a number in base BASE from stdio stream STREAM and store the result in DEST_INTEGER.
#define mpz_inp_str __gmpz_inp_str
__GMP_DECLSPEC size_t mpz_inp_str __GMP_PROTO ((mpz_ptr, FILE *, int));
mpz_powm(res,base,exp,mod) -- Set RES to (base**exp) mod MOD.
#define mpz_powm __gmpz_powm
__GMP_DECLSPEC void mpz_powm __GMP_PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
mpz_out_str(stream, base, integer) -- Output to STREAM the multi prec. integer INTEGER in base BASE.
#define mpz_out_str __gmpz_out_str
__GMP_DECLSPEC size_t mpz_out_str __GMP_PROTO ((FILE *, int, mpz_srcptr));
И если я все правильно понял, то должно получиться примерно сследующее:
Код:
void RSA_Encrypt(char *packet,char *RSAKey)
{
char *string_to_encrypt;
memcpy(string_to_encrypt,packet+2,128); //необходимо зашифровать только 128 байт начиная с 3
mpz_t Pa,raw,n,e;
mpz_init(Pa);
mpz_init(raw);
mpz_init(n);
mpz_init(e);
mpz_inp_str(raw,string_to_encode,16);
mpz_inp_str(n,RSAKey,16);
mpz_inp_str(e,"65537",10);
mpz_powm(
Pa, // рез-т
raw, // основание (т.е. блок, который необходимо зашифровать)
e, //65537
n); //из пакета инит
mpz_out_str(
string_to_encrypt,
16,
Pa);
memcpy(packet+2,string_to_encrypt,128); //запихиваем в пакет зашифрованный блок
}
Последний раз редактировалось Blo0DeX, 06.11.2009 в 16:09.
Blo0DeX, ну да, как то так, ток не забудь что RSAKey приходит в зашифрованном виде
PS и кстати у mpz_powm есть аналог (mpz_powm_i вроде или чтот в таком духе) для случаев когда e является небольшим числом, а у нас какраз такой случай, этот аналог думаю удобнее и наверно чуть быстрее
__________________
Я здесь практически не появляюсь!, Skype - ikskor
блин. у меня на этой строчке в си Ошибка сегментации ))
попробовал заменить на mpz_out_str(stdout, 32, r);
1 ) можешь описать назначение аргументов ? видимо я что-то не так понял..
2 ) снял лог функции RSAEncrypt в файл:
Цитата:
pack: maxno 123 (туча нулей не отображается тут)
sR : џ^g"8kъЫ
+qГ1˜zбИ=oбw°ч,ЪOS%A“й<®/Ї^˜;ќ§’fѕ8‰9њњц\PЅ™?}Щ$р *љlBСew53EMаY•Dе_8«V<¦Q ¦…‹„ЭІФЅѓЈ2ђaз4…юЋnЏъ(…Ч.№
procedure mpz_export(var rop, count; order, size, endian, nails: Cardinal; const op: mpz_t); cdecl;
rop - то куда экспортируем
count - сколько элементов импортируем
order - порядок экспорта (0 - от младшего к старшему, 1 - наоборот)
size - размер элемента в байтах
endian - порядок байт в элементах (как и order)
nails - а хер его знает, не помню...
op - откуда экспортируем
то есть я экспортирую в 128мибайтный результат (Result) 128байтное число (r) в виде 32ух 4хбайтных элементов от старшего байта к младшему)
Цитата:
Сообщение от Кислый
у меня же mpz_out_str выдает керовину
и в чем херовиность? что ты его просишь выдать то и выдаёт...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
mpz_out_str переводит число в строку в заданной системе счисления (причем 256ричная система не поддерживается)
mpz_export экспортирует число в память в бинарном виде
так что я хз чем они вообще похожи
а ещё я хз чего ты вообще пытаешь сделать, явно не авторизоваться на сервере линейки
__________________
Я здесь практически не появляюсь!, Skype - ikskor