Cryptlib не будет шифровать с помощью El-Gamal, и я не понимаю почему?

#security #cryptography #encryption

#Безопасность #криптография #шифрование

Вопрос:

 unsigned char * BUFFER_PTR;
CRYPT_CONTEXT cryptContext;

// Initialize the buffer
BUFFER_PTR = (unsigned char *) malloc(sizeof(char) * BUFFER_SIZE);
memset(BUFFER_PTR, 'X', BUFFER_SIZE);

//Initialize crytplib
cryptInit();
// create encryption context
cryptCreateContext( amp;cryptContext, CRYPT_UNUSED, CRYPT_ALGO_ELGAMAL);
cryptSetAttributeString( cryptContext, CRYPT_CTXINFO_LABEL, KEY_ID, strlen(KEY_ID));
cryptGenerateKey(cryptContext);

/* ERROR >>>*/ cryptEncrypt(cryptContext, BUFFER_PTR, BUFFER_SIZE); /* this line fails and I don't know why :-( */
  

Комментарии:

1. Пожалуйста, будьте более конкретными. Когда вы говорите, что строка завершается ошибкой, какой код ошибки она возвращает? Вы смотрели этот код ошибки в документации CryptLib?

Ответ №1:

Поиск в Google cryptlib CRYPT_ERROR_PARAM3 предполагает, что возникла проблема с вашим третьим параметром. Теперь посмотрите на страницу 186 руководства cryptlib, о CryptEncrypt алгоритмах с открытым ключом:

Если длина зашифрованных данных не совпадает с размером ключа, функция вернет CRYPT_ERROR_PARAM3, чтобы указать, что длина недопустима.

Я никогда не использовал cryptlib, так что это обоснованное предположение, но, похоже, размер вашего открытого текста не подходит для используемого вами ключа.