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
да к тому, что она послужила для меня отправной точкой в поиске решения ))
в принципе код рабочий, но смущает вот что: pack и rsakey должны состаять из символов 16й системы счисления.. (т.е. {'0','1','2','3','4','5','6','7','8','9','A','B',' C','D','E','F'}.
является ли это затруднением ?
учитывая что pack - это 132 байта. при этом как минимум 30 байт (логин и пасс ) могут содержать другие символы