Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 05.11.2009, 12:33   #1
Новичок
 
Регистрация: 05.11.2009
Сообщений: 10
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
Blo0DeX пока неопределено
По умолчанию Шифрование RSA

Доброго времени суток, подскажите компонент шифрования RSA для С Builder'a? Или разъясните в чем я неправ.

Из статьи с википедии следует что для того чтобы зашифровать пакет необходимы только N и E части ключа.

В статье TechnoWiz@rd'а написано:

Цитата:
Ключ состоит из следующих частей: B = 1024, E = 65537, N = передается в пакете Init. Вместе эти 3 части составляют целый RSA
ключ
Возникает вопрос: зачем нужно В?

Гуглом нарыл только одну библиотеку, реализующую RSA, в которой меня смутили передаваемые ей параметры

Код:
long RsaEncode(long b, long n, long e)
{
	long result = 1;
	for(long i=0; i<e; i++)
	{
		result = (result*b) % n;
	}
	return result;
}
Из этого кода можно сделать вывод, что в эту функцию передаются только части ключа, а как тогда скормить ей строку, которую необходимо зашифровать?
Blo0DeX вне форума   Ответить с цитированием
Старый 05.11.2009, 15:07   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Blo0DeX, что делает приведенная функция я не знаю но точно не шифрует по RSA 1024битным ключем
для реализации этого шифрования советую использовать библиотеку GMP, в нете есть примеры реализации РСА с её помощью, саму библиотеку лучше брать в виде libgmp-3.dll файла ибо там точно всё что надо экспортируется (она кстати в l2encdec используется)
ЗЫ очень быстрая либаб у меня с ней шифрование логина с паролем происходит в 20 раз быстрее чем если юзать FGInt модуль для дельфиб причем и работает всегда правильно в отличии от всё того же FGInt
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 2 спасибками от:
Старый 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 вне форума   Ответить с цитированием
Старый 06.11.2009, 21:44   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Blo0DeX, ну да, как то так, ток не забудь что RSAKey приходит в зашифрованном виде
PS и кстати у mpz_powm есть аналог (mpz_powm_i вроде или чтот в таком духе) для случаев когда e является небольшим числом, а у нас какраз такой случай, этот аналог думаю удобнее и наверно чуть быстрее
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 06.11.2009, 21:58   #5
Новичок
 
Регистрация: 05.11.2009
Сообщений: 10
Сказал Спасибо: 1
Имеет 1 спасибку в 1 сообщении
Blo0DeX пока неопределено
По умолчанию

Цитата:
Сообщение от xkor Посмотреть сообщение
PS и кстати у mpz_powm есть аналог (mpz_powm_i вроде или чтот в таком духе) для случаев когда e является небольшим числом
есть mpz_powm_ui, в описании то же самое что и у mpz_powm, что на самом деле не ковырялся, не смотрел....
Blo0DeX вне форума   Ответить с цитированием
Старый 07.11.2009, 00:25   #6
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Blo0DeX, ну она и делает то же самое, отличается тока типом одного из параметров
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 12.11.2010, 18:50   #7
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 38
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Кислый пока неопределено
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gmp.h>

int main (int argc, char **argv)
{
    //var
    char rsakey[16] = {'1','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char* pack 	 = "123AAA45";
    printf("pack   = %s\n",pack);
    printf("rsakey = %s\n",rsakey);

    //begin*
    // инициализация переменных
    mpz_t m, e, d, r;
    mpz_init(m);
    mpz_init(e);
    mpz_init(d);
    mpz_init(r);

    
    mpz_init_set_str(m, rsakey, 16);
    mpz_init_set_str(d, pack, 16);
    //mpz_set_ui(e,65537); один хер.
    mpz_init_set_str(e, "65537", 10);
    mpz_powm(r, d, e, m);

    //mpz_get_str(sR, 16, r);
    //char* sR = mpz_get_str(NULL, 16, d);

    char sR[5000] = {};
    mpz_get_str(sR, 16, r);
    int k = strlen(sR);

    printf("результат = %s | размер %i\n",sR, k);
  
    mpz_clear(m);
    mpz_clear(e);
    mpz_clear(d);
    mpz_clear(r);
printf("Finish\n");
return 100500; //стопицот
}
Кислый вне форума   Ответить с цитированием
Старый 13.11.2010, 00:22   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Кислый, это ты к чему решил воскресить прошлогоднюю тему?
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 13.11.2010, 13:32   #9
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 38
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Кислый пока неопределено
По умолчанию

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

является ли это затруднением ?
учитывая что pack - это 132 байта. при этом как минимум 30 байт (логин и пасс ) могут содержать другие символы
Кислый вне форума   Ответить с цитированием
Старый 13.11.2010, 14:36   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от Кислый Посмотреть сообщение
pack и rsakey должны состаять из символов 16й системы счисления
кому они это должны?
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 02:49.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!