以“简单”形式获取RSA密钥

时间:2015-06-16 08:59:56

标签: c++ c encryption openssl rsa

如何以RAW格式获取OpenSSL生成的密钥?我的意思是我无法在任何在线工具中解码我的编码消息。我应该采取哪些措施将我的密钥以适当的形式分发给其他客户(在其他应用程序和网络应用程序中)? 我的代码是:

void VS_CarrierNet::generateKeys()
{
    m_rsa = RSA_generate_key(KEY_LENGTH, PUB_EXP, nullptr, nullptr);

    // To get the C-string PEM form:
    BIO *pri = BIO_new(BIO_s_mem());
    BIO *pub = BIO_new(BIO_s_mem());

    PEM_write_bio_RSAPrivateKey(pri, m_rsa, nullptr, nullptr, 0, nullptr, nullptr);
    PEM_write_bio_RSAPublicKey(pub, m_rsa);

    int pri_len = BIO_pending(pri);
    int pub_len = BIO_pending(pub);

    m_privateKey = new char[pri_len + 1];
    m_publicKey = new char[pub_len + 1];

    BIO_read(pri, m_privateKey, pri_len);
    BIO_read(pub, m_publicKey, pub_len);

    m_privateKey[pri_len] = '\0';
    m_publicKey[pub_len] = '\0';

    BIO_free_all(pub);
    BIO_free_all(pri);

    std::cout << "\n\n\n" << m_privateKey << "\n\n\n";
}

示例输出为:

  

-----开始RSA私钥----- MIIEowIBAAKCAQEA1ZI9ucjBwMH2uePmln / xF3mjEIz0WcDQWeI9qZVDXckaFQhr   vxDy7GKIuxqEOgcd4zWAGPsyn72i7v2bGxPHXcDdtSqImYk3p2oljBuuQCsbxAxR   JXH54D6qUWBMsA5 + 4K9JVxd // RAhpE / pnXADP6z0O4IP + 84m3PtBJjnmaIAOdnx0   iM61E1f7QnuaFWhG / K1lljlXCP30yIanKdr4c2iyF + XSF6SqE7ZcLTmFZAR9v + Gh的   13vpMTwEWGJCUhJJN3Y / 83VABWS + HGx7R7nI6IzWwxCcpoLxA67x +米/ 0WwMuiqDe   MXIEDL6HMR7L2eEG80ef8 + uSyYVFiGGyH + 3AUQIBAwKCAQEAjmF + e9sr1dake + 1E   ZFVLZPvCCwii5oCK5pbTxmOCPoYRY1ryf2Ch8uxbJ2cC0VoT7M5VZfzMan5sn1O8   vLfaPoCTzhxbEQYlGkbDsr0e1XISgrLgw6FRQCnG4OrdyrRUlcow5LpVU2AWbYqb   vkqs1R34J6wKp97Ek1IrbtFERal77 / J115mYiW / cPlZ4YfOCte2FmxVcvCcT2ZwH   4xQCTs9jPzzeMiN5XGIRusKgbK6 + 5KhyOa3evAT66oXZR96YtBnHZyRR3IElO3nZ   Uln2JL5ta0g1FqFWwV8cJed5fAM27JtkyqlVR07j4Dp1 / 4PlargVIAtGcAnlVoh6   pMKuSwKBgQD42ATgBRMWdXzUv / TJ + o8lI5CPK0j2S2zk + jHUn5RD2 + obJwPh6a0n   sVT6YotYbAe + cQw93g98r5mGFg2OlFnkvS / Iho8Nh24tDCxu1qlaVrpNvja2vi3c   afSmNfM0t + KlUkeh88eZYFD9YSE4V4Kz5FZkC4oGcrEh / hK2E0BHHQKBgQDbtovj   wFU5z7NcJQUbh + vdyDiOAlBVo1ZyB + rGtaixIUeCEgai4sJMV85HMoo8VPag99i4   oueeZ5sF4ovt0ep / BB / MUI + 3szTZNwlGdYl9WrTk4 + 2WRmMSd6uhi6GJaRu21XAl   DaxqwXcz / 6Xigxh67t0cOFCirsVLiIJEFYlzxQKBgQCl5ViVWLdkTlM4f / iGpwoY   wmBfcjCkMkiYpsvjFQ2CkpwSGgKWm8jFIONRlweQSAUpoLLT6V + odREEDrO0YuaY   FH / bBF9eWklzXXL0jxuRjybefs8kfsk9m / huzqIjJUHDjC / BTS + 7lYtTlhYlj6x3   7Y7tXQau9yDBVAx5YiraEwKBgQCSebKX1Y4mineSw1i9BUfpMCW0AYrjwjmhWpyE   eRsgwNpWtq8XQdbdj97aIbF9jfnApTslwe ++ 77yulwfz4Ub / nWqINsp6d3iQz1uE   Tluo5yNDQp5kLuy2 + nJrsmuw8L0kjkrDXnLx1k93 / 8PsV2WnSei9euBsdIOHsFbY   DluigwKBgHHjjR2zHw9wdCB1l66WlIAkT4g2QlX5SM1dbFtSwjIin01NpYrWOhsx   TSSjVAGNFXYO1ghl9Eu1rsQEAhQlZ0aCs7l9 / V2 + xIBmubzFqldjpODR1UPrj9O8   Kg3mJD7kG / 2ql4dioxy3eTHGkzJBvTwfM / rBhY7rQ4X8ly8c / DVQ   ----- END RSA私钥-----

我应该以这种形式分发这个密钥,还是我需要它而不需要额外的文本和'\ n'?我尝试删除页眉,页脚,'\ n'字符和base64解码。但这没有用。

2 个答案:

答案 0 :(得分:1)

您的私钥是PKCS#8标准格式,广泛使用。

您可以使用openssl

解密RSA消息
openssl rsautl -decrypt -inkey privkey.pem < ciphertex.bin > plaintext.bin

此处privkey.pem是包含您的私钥的文件。 ciphertex.bin是包含ecnrypted消息的文件,plaintext.bin将包含已解密的消息。

答案 1 :(得分:1)

这个的简单形式 - 包括页眉和页脚以及额外的换行符。大多数证书程序都可以正常处理此表单。