Расшифровка OpenSSL RSA происходит случайным образом C / C ++ - PullRequest
0 голосов
/ 05 сентября 2018

Я реализую алгоритм RSA, где я читаю открытый и закрытый ключи из сертификатов .crt и .pem соответственно. Он шифрует данные правильно, но проблема заключается в расшифровке. Иногда он прекрасно расшифровывается, а иногда выдает следующую ошибку:

Ошибка расшифровки сообщения: ошибка: 04099079: rsa процедуры: RSA_padding_check_PKCS1_OAEP_mgf1: ошибка декодирования oaep.

Дешифрование завершается неудачно, когда следующее, если условие выполняется

if ((decrypt_len = RSA_private_decrypt(strlen(c), (unsigned char*)c,
        (unsigned char*)decrypt, rsa, RSA_PKCS1_OAEP_PADDING)) == -1)

Блок кода приведен ниже:

void DecryptRSA(const char *message)
{
    char *privateCertPath = "privateCertificate.pem";

    const char *msg = message; //message in base64 characters
    BIO *bo = BIO_new_file(privateCertPath, "rb");

    EVP_PKEY *pri;
    OpenSSL_add_all_algorithms();
    pri = PEM_read_bio_PrivateKey(bo, NULL, NULL,  NULL);
    if (pri == NULL) {
        /* Error */
    }

    RSA* rsa = EVP_PKEY_get1_RSA(pri);

    unsigned char *decrypt = (unsigned char *) malloc(RSA_size(rsa));
    int decrypt_len;
    char *err = (char *) malloc(130);
    string msgascii = base64_decode(msg); //converting 
    const char *c = msgascii.c_str();   

    if ((decrypt_len = RSA_private_decrypt(strlen(c), (unsigned char*)c,
        (unsigned char*)decrypt, rsa, RSA_PKCS1_OAEP_PADDING)) == -1)
    {
        ERR_load_crypto_strings();
        ERR_error_string(ERR_get_error(), err);
        fprintf(stderr, "Error decrypting message: %s\n", err);     
    }

    printf("%s", decrypt);

    RSA_free(rsa);
    BIO_free(bo);
    free((char*)msg);
    free((char*)c);
    free(decrypt);  
    free(err);  
}

1 Ответ

0 голосов
/ 06 сентября 2018

Использование strlen (c) в условии if приводило к завершению массива char, когда зашифрованные символы содержали нулевой символ, поэтому вместо этого я использовал msgascii.size (), и это решило проблему.

...