powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / проблемы с RSA
23 сообщений из 23, страница 1 из 1
проблемы с RSA
    #33782615
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, такое дело.
У меня есть публичный ключ длиной 128 байт. Мне нужно этим ключом зашифровать некие данные.
И тут встала проблема. Как известно, в RSA публичный ключ состоит из двух частей:
1) E (рандомное число, которое должно быть взаимопростым с произведением (p-1)*(q-1))
2) N (N=p*q)
И вопрос в том, как мне узнать какая часть 128-байтного ключа N, а какая E?
Просто я достал несколько реализаций RSA на срр и во всех нужно использовать не публичный ключ целиком, а как раз E и N по отдельности :\ Как мне их определить по публичному ключу?

И последнее, никто не знает наиболее простой реализации RSA под msvc 6.0? Crypto API не предлагать))

Заранее спасибо!
...
Рейтинг: 0 / 0
проблемы с RSA
    #33782700
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nopПросто я достал несколько реализаций RSA на срр и во всех нужно использовать не публичный ключ целиком, а как раз E и N по отдельности :\ Как мне их определить по публичному ключу?а что, в этих реализациях эти е и н не определяются?
...
Рейтинг: 0 / 0
проблемы с RSA
    #33783172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nop
...Просто я достал несколько реализаций RSA...


Какую библиотеку вы используете и почему?
Пробовали OpenSSL, Cryptix, PGP ?
...
Рейтинг: 0 / 0
проблемы с RSA
    #33784613
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cryptlib
не пользовались такой?

typedef struct {
/* Status information */
int isPublicKey; /* Whether this is a public or private key */

/* Public components */
unsigned char n[ CRYPT_MAX_PKCSIZE ]; /* Modulus */
int nLen; /* Length of modulus in bits */
unsigned char e[ CRYPT_MAX_PKCSIZE ]; /* Public exponent */
int eLen; /* Length of public exponent in bits */

/* Private components */
unsigned char d[ CRYPT_MAX_PKCSIZE ]; /* Private exponent */
int dLen; /* Length of private exponent in bits */
unsigned char p[ CRYPT_MAX_PKCSIZE ]; /* Prime factor 1 */
int pLen; /* Length of prime factor 1 in bits */
unsigned char q[ CRYPT_MAX_PKCSIZE ]; /* Prime factor 2 */
int qLen; /* Length of prime factor 2 in bits */
unsigned char u[ CRYPT_MAX_PKCSIZE ]; /* Mult.inverse of q, mod p */
int uLen; /* Length of private exponent in bits */
unsigned char e1[ CRYPT_MAX_PKCSIZE ]; /* Private exponent 1 (PKCS) */
int e1Len; /* Length of private exponent in bits */
unsigned char e2[ CRYPT_MAX_PKCSIZE ]; /* Private exponent 2 (PKCS) */
int e2Len; /* Length of private exponent in bits */
} CRYPT_PKCINFO_RSA;

вот структура с описанием ключей. Как видите, тоже n и e.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33785883
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто с cryptlib не работал?

int main(int argc, char* argv[]) {
char *buffer = "hello world!\0";
CRYPT_ALGO_TYPE cryptAlgo = CRYPT_ALGO_RSA;
CRYPT_CONTEXT cryptContext;
CRYPT_KEYSET cryptKeyset;

cryptInit();
cryptCreateContext( &cryptContext, CRYPT_UNUSED, CRYPT_ALGO_RSA );
cryptSetAttributeString( cryptContext, CRYPT_CTXINFO_LABEL,"AAAAAAAAAAAAAA", 14 );
cryptGenerateKey( cryptContext );

printf("buffer: %s\n",buffer);
cryptEncrypt( cryptContext, buffer, strlen(buffer) );
printf("buffer: %s\n",buffer);

cryptEnd();

return 0;
}

на экран выводит:
buffer: hello world!
buffer: hello world!

Есть идеи, почему текст не зашифровывается? :\ Что я не так делаю? Ниодна из функций ошибок не возвращает - проверял.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33786050
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 nop

Откуда вы взяли этот пример?
...
Рейтинг: 0 / 0
проблемы с RSA
    #33786421
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эээ да как вам сказать, смотрел исходники "test", который идёт вместе c cryptlib. Там просто тестируются все поддерживаемые протоколы по очереди. И понахватал оттуда.
А что в примере что-то неправильно? :\
Вы работали когда-нибудь с cryptlib?
...
Рейтинг: 0 / 0
проблемы с RSA
    #33786484
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сегодня впервые смотрел на эту библиотечку. Честно
говоря, пока выводов никаких. Вам могу предложить,
вывести более детальную информацию на экран после
вызовов cryptCreateContext, cryptSetAttributeString,
cryptGenerateKey
. Обратите внимание, все они возвращают
код ошибки в виде status и проверяются через предикат
cryptStatusOK. Пример из envelope.c:

Код: plaintext
1.
2.
status = cryptEncrypt( hashContext, ENVELOPE_TESTDATA,ENVELOPE_TESTDATA_SIZE );
if( cryptStatusOK( status ) .....

Повторите эти проверки.

Пробуйте, публикуйте протокол работы.

Я думаю, что ошибка тривиальна. Скорее всего она - в
неверной последовательности операций и.т.п.

P.S. Убедитесь, что char - это байт, а strlen() возвращает
не нулевое значение.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33787767
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за подсказку, я поставил проверки у каждой функции, в итоге сама cryptEncrypt() возвращает ошибку -3.
Я посмотрел в заголовках, вот описание ошибок:

/* No error in function call */

#define CRYPT_OK 0 /* No error */

/* Error in parameters passed to function */

#define CRYPT_ERROR_PARAM1 -1 /* Bad argument, parameter 1 */
#define CRYPT_ERROR_PARAM2 -2 /* Bad argument, parameter 2 */
#define CRYPT_ERROR_PARAM3 -3 /* Bad argument, parameter 3 */
#define CRYPT_ERROR_PARAM4 -4 /* Bad argument, parameter 4 */
#define CRYPT_ERROR_PARAM5 -5 /* Bad argument, parameter 5 */
#define CRYPT_ERROR_PARAM6 -6 /* Bad argument, parameter 6 */
#define CRYPT_ERROR_PARAM7 -7 /* Bad argument, parameter 7 */


То есть -3 означает, что ошибка в 3-ем аргументе. Там передаётся длина данных, которые хотим зашифровать. Я посмотрел сорсы функции cryptEncrypt, вот что там увидил:


C_RET cryptEncrypt( C_IN CRYPT_CONTEXT cryptContext,
C_INOUT void C_PTR buffer,
C_IN int length )
{
static const COMMAND_INFO cmdTemplate = \
{ COMMAND_ENCRYPT, COMMAND_FLAG_NONE, 1, 1 };
static const ERRORMAP errorMap[] = \
{ ARG_O, ARG_S, ARG_N, ARG_LAST };
COMMAND_INFO cmd;
int status;

/* Perform basic client-side error checking. In theory we should also
check for writeability since the encryption does an in-place update,
however when we're hashing data it's valid for the data to be read-
only so we only check for readability. In addition when hashing we
could be doing a hash-wrapup call so we allow a zero length and only
check the buffer if the length is nonzero */
if( !isHandleRangeValid( cryptContext ) )
return( CRYPT_ERROR_PARAM1 );
if( length < 0 )
return( CRYPT_ERROR_PARAM3 );
..............
видите как, но длина то у меня точно положительная. Я даже свои числа пробовал подставлять, пробовал длину в отдельную переменную заносить и её передавать, всё равно эта ошибка.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33787894
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-таки проверки в cryptEncrypt() я все прохожу:
if( !isHandleRangeValid( cryptContext ) )
return( CRYPT_ERROR_PARAM1 );
if( length < 0 )
return( CRYPT_ERROR_PARAM3 );

Ошибка появляется где-то в дебрях cryptlib :\
...
Рейтинг: 0 / 0
проблемы с RSA
    #33788054
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут надо почесать репу...
Опубликуйте обновленную версию вашего исходника.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33789390
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int main(int argc, char* argv[]) {
char *buffer;
int status;
CRYPT_ALGO_TYPE cryptAlgo = CRYPT_ALGO_RSA;
CRYPT_CONTEXT cryptContext;
CRYPT_KEYSET cryptKeyset;

cryptInit();

buffer = (char *)malloc(300);
memset(buffer,'\x00',300);
memcpy(buffer,"hello world!",sizeof("hello world!"));


status = cryptCreateContext( &cryptContext, CRYPT_UNUSED, CRYPT_ALGO_RSA );
if(cryptStatusError(status)) {
printf( "cryptCreateContext() failed with error code %d.\n", status );
exit(EXIT_FAILURE);
}


status = cryptSetAttributeString( cryptContext, CRYPT_CTXINFO_LABEL,"AAAAAAAAAAAAAA", 14 );
if(cryptStatusError(status)) {
printf( "cryptSetAttributeString() failed with error code %d.\n", status );
exit(EXIT_FAILURE);
}


status = cryptGenerateKey( cryptContext );
if(cryptStatusError(status)) {
printf( "cryptGenerateKey() failed with error code %d.\n", status );
exit(EXIT_FAILURE);
}


printf("buffer: %s, len: %i\n",buffer, strlen(buffer));

status = cryptEncrypt( cryptContext, buffer, 50);
if(cryptStatusError(status)) {
printf( "cryptEncrypt() failed with error code %d.\n", status );
exit(EXIT_FAILURE);
}

printf("buffer: %s\n",buffer);

cryptEnd();

return 0;
}


Ошибку -3 выводит на cryptEncrypt... Хотя всё делаю как также как у них в сорсах, в мануалах.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33791145
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК. Ознакомился. Только щас занят сильно. Посмотрю
завтра утром.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33796306
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну что, есть идеи? :\
Может мне действительно какой-нибудь другой либлой воспользоваться...
...
Рейтинг: 0 / 0
проблемы с RSA
    #33797295
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вы компилировали саму библиотеку ? Честно говоря,
у меня сейчас под рукой только Борланды, и есть некоторые
проблемы...
...
Рейтинг: 0 / 0
проблемы с RSA
    #33797390
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отлично скомпилилась, даже без варнингов, на старом MSVC 6.0
Могу скинуть в скомпилированном виде, если надо...
...
Рейтинг: 0 / 0
проблемы с RSA
    #33797414
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
проблемы с RSA
    #33797496
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отправил
...
Рейтинг: 0 / 0
проблемы с RSA
    #33801342
nop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем спасибо за помощь, я решил как нормальный человек заюзать openssl )
Без проблем вставил к себе в программу, без проблем шифрую сообщения, но не могу заюзать свой публичный ключ)) Вы не работали с openssl?
...
Рейтинг: 0 / 0
проблемы с RSA
    #33806162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nopв общем спасибо за помощь, я решил как нормальный человек заюзать openssl )
Без проблем вставил к себе в программу, без проблем шифрую сообщения, но не могу заюзать свой публичный ключ)) Вы не работали с openssl?

Прошу прощения, что долго не отвечал. Был сильно загружен.

Очень хорошо, что вы выбрали OpenSSL. Она более открыта и шире
документирована. С OpenSSL пришлось столкнутся, работая с Оракл.
(она входит в комплект). Сильно глубоко ее я не использовал.

CryptLib по моему мнению страдает остутствием внимания общественности
а так... ничего.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33807297
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nop
может я не в тему.
вот в инструкции к пейпалу по использованию опенссл.
если это тот опенссл как у Вас, то надо переконверить затребованный
предположительно публичный ключ (API Credential sertificate) в другой формат.
...
Рейтинг: 0 / 0
проблемы с RSA
    #33807299
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
проблемы с RSA
    #33807301
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, вообще, использую для таких целей утилиты GnuPG в командных файлах.
там инструкция понятная вполне.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / проблемы с RSA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]