Ошибка возврата расшифровки Rsa 0D0680A8: процедуры кодирования asn1: asn1_check_tlen: неправильный тег в openssl cpp - PullRequest
0 голосов
/ 28 января 2020

Я использовал библиотеку openssl для шифрования / дешифрования RSA в c ++ (android ndk), и она работает нормально. Но когда я зашифровал данные на сайте тестера RSA и расшифровал их на c ++, openssl возвращает эту ошибку:

0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag

Вот мой код:

typedef unsigned char byte;

char plainText[256] = "Test";
char publicKey[2048] = "-----BEGIN PUBLIC KEY-----\n
..."
char privateKey[2048] = "-----BEGIN RSA PRIVATE KEY-----\n"
...

RSA *rsa = createRSA(reinterpret_cast<unsigned char *>(publicKey), 1);

int size = RSA_size(rsa);
if (size < 0)
        throw std::runtime_error("RSA_size failed");

 std::string encrypted = "BVAbJHA8v1qo8JIyqLZb/wpAQQeQnSiUzO3Ajfo3cT0nQ+fWay1MLHY6Ra+XM6OswX7f4CVG0mgvJlLmMrEki12tEDNmVR63FZZOgW2jMRLSR6ZH2zPVW1fVh709xhFgp/YWagCmtlAHLCzwvbYkpDDSnZ5HLPL5oZE9VeMUlDCsVz4cvN8+e1Qv7PXwxtJjirDpwXUCW89qoKGk1UOoTPacRN8GpNo0ci96rqodoG5D8RYhBd0J1XBwtxWT91/qMUAV+xJbuO7mNLBjY+6tyJ1yOL4s2Ka0wQmLC+Kpk8IqBiuW16xcXdQXmtMU3r5gP6gl7SuQyFp0C8gK5aOpwQ==";

unsigned char decrypted[2048] = {};
char *errorChar = new char[120];

//padding RSA_PKCS1_PADDING

//int retEnc = RSA_public_encrypt(strlen(plainText),
//                                    reinterpret_cast<const unsigned char //*>(plainText), (byte*)&encrypted[0], rsa, RSA_PKCS1_PADDING);

//if (retEnc < 0) {
//      std::string errorMsg;
//      errorMsg.resize(256);
//      (void) ERR_error_string(ERR_get_error(), &errorMsg[0]);
//      throw std::runtime_error("RSA_public_encrypt failed");
// }
//    encrypted.resize(retEnc);

RSA *pk = createRSA(
            reinterpret_cast<unsigned char *>(privateKey), 0);

int decrypted_length = RSA_private_decrypt(RSA_size(rsa), reinterpret_cast<const unsigned char *>(encrypted.c_str()), decrypted, pk , RSA_PKCS1_PADDING);

if (decrypted_length == -1) {
    long Error = ERR_get_error();
    const char *MSG = ERR_error_string(Error, NULL);
    exit(0);
}

В чем причина получения ошибка?

...