Показать сообщение отдельно
Старый 06.11.2009, 13:27   #3
Новичок
 
Регистрация: 05.11.2009
Сообщений: 10
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
Blo0DeX пока неопределено
По умолчанию

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 вне форума   Ответить с цитированием