Преобразование действительно большого целого числа в форме дескриптора Symbian в unsigned char * - PullRequest
0 голосов
/ 13 мая 2011

Мы пытаемся реализовать шифрование RSA в Symbian с использованием библиотеки Open C / C ++ (rsa.h) и метода 'RSA_public_encrypt':

buffSize = RSA_public_encrypt(maxSize, (unsigned char *) plainkey, (unsigned char *) cipherkey, rsa, RSA_NO_PADDING);

Мы создали открытый ключ со своим собственным показателем и модулем и поместили его в rsa-объект. Наш простой текст для шифрования - это очень большое целое число, полученное в виде строки (например, дескриптор Symbian).

Тем не менее, простой текст должен быть предоставлен как «unsigned char *» для метода шифрования. Как я могу преобразовать дескриптор (обычный текст) в «unsigned char *», чтобы метод шифрования интерпретировал наш простой текст как очень большое целое число. Или для тех, кто не знаком с дескрипторами Symbian: как я могу преобразовать обычный текст из обычной строки (char *) в значение, которое шифрование интерпретирует как очень большое целое число.

Мы уже пытались предоставить простой текст несколькими способами, но зашифрованный текст был не таким, каким он должен был быть. (мы сравнили это с результатами на других платформах, которые, как мы убедились, были правильными).

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 13 мая 2011

Первый аргумент RSA_public_encrypt равен flen, а второй from, то есть он будет шифровать flen байт от from.

Предполагая, что у вас есть TDesC8 дескриптор source, который вы хотите зашифровать, вызовите функцию следующим образом:

 RSA_public_encrypt(source.Length(), source.Ptr(), ... 
0 голосов
/ 13 мая 2011

Вы должны выделить (malloc) переменные plainkey и cipherkey и скопировать незашифрованную строку простого текста в cipherkey, используя lstrcpy или что-то подобное, чтобы эта функция работала.

plainkey = malloc(PLAINKEY_SIZE);
cipherkey = malloc(CIPHERKEY_SIZE);
lstrcpy(plainkey, "12345...");
buffSize = RSA_public_encrypt(maxSize, plainkey, cipherkey, rsa, RSA_NO_PADDING);

Вы также можете использовать массивы без знака:

unsigned char plainkey[PLAINKEY_SIZE] = "12345...";
unsigned char plainkey[CIPHERKEY_SIZE];
buffSize = RSA_public_encrypt(maxSize, plainkey, cipherkey, rsa, RSA_NO_PADDING);
...