使用OpenSSL移植Java加密代码

时间:2018-09-05 23:58:02

标签: java c++11 encryption encoding openssl

我有以下用Java实现的代码。该方法以字符串形式接收base64 PKCS8编码的密钥,并向后吐出RSA私钥(这是我的解释,我是crypto的新手,请耐心等待)

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,该操作也会失败。

有人看到此代码有任何明显的问题吗?有一个更好的方法吗? (更简单?)

0 个答案:

没有答案