Использование OpenSSL для переноса кода шифрования Java - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть следующий код, реализованный на Java. Метод принимает ключ в кодировке base64 PKCS8 в виде строки и выдает обратно секретный ключ RSA (это моя интерпретация, я новичок в крипто, поэтому, пожалуйста, потерпите меня)

public static PrivateKey getPrivateKey(final String 
 Base64EncodedPkcs8String) {
    PKCS8EncodedKeySpec privateKeySpec = new 
    PKCS8EncodedKeySpec(Base64.decodeBase64(base64EncodedPkcs8String));

    try {
        return KeyFactory.getInstance("RSA").generatePrivate(privateKeySpec);
    }
    catch (NoSuchAlgorithmException e) {
        logger.error("NoSuchAlgorithmException", e);
        return null;
    }
    catch (InvalidKeySpecException e) {
        logger.error("InvalidKeySpecException", e);
        return null;
    }
}

Я пытаюсь сделать что-то подобное, используя OpenSSL:

EVP_PKEY* pPrivateKeyInfo = nullptr;
std::string copy = "\n"; //<-- I don't know if this is right
copy += strBase64EncodedPrivateKey;
copy += "\n"; //<-- or this
auto c_string = copy.c_str();
unsigned char* pszDecodedMessage = nullptr;
size_t stEncodedMessageLength{};

this->DecodeBase64Message(c_string, pszDecodedMessage, &stEncodedMessageLength);

auto pKeybio = BIO_new_mem_buf((void*)(pszDecodedMessage), -1);

if (nullptr == pKeybio)
{
    return nullptr;
}

pPrivateKeyInfo = PEM_read_bio_PrivateKey(pKeybio, &pPrivateKeyInfo, nullptr, nullptr);

if (nullptr == pPrivateKeyInfo)
{
    return nullptr;
}

Вызов PEM_read_bio_PrivateKey всегда терпит неудачу. Я также пытался использовать PEM_read_bio_PKCS8_PRIV_KEY_INFO, которая также не работает.

Кто-нибудь видит какие-либо явные проблемы с этим кодом? Есть лучший способ сделать это? (Проще?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...