c++ - 以 "simple"形式获取 RSA key

标签 c++ c encryption openssl rsa

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

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";
}

示例输出为:

-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA1ZI9ucjBwMH2uePmln/xF3mjEIz0WcDQWeI9qZVDXckaFQhr vxDy7GKIuxqEOgcd4zWAGPsyn72i7v2bGxPHXcDdtSqImYk3p2oljBuuQCsbxAxR JXH54D6qUWBMsA5+4K9JVxd//RAhpE/pnXADP6z0O4IP+84m3PtBJjnmaIAOdnx0 iM61E1f7QnuaFWhG/K1lljlXCP30yIanKdr4c2iyF+XSF6SqE7ZcLTmFZAR9v+Gh 13vpMTwEWGJCUhJJN3Y/83VABWS+HGx7R7nI6IzWwxCcpoLxA67x+m/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 PRIVATE KEY-----

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

最佳答案

简单的形式 - 包括页眉和页脚以及额外的换行符。大多数证书程序都可以很好地处理这种形式。

关于c++ - 以 "simple"形式获取 RSA key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30863050/

相关文章:

克隆系统调用的参数存储在堆栈或其他地方?

c# - 注册用户的激活邮件 MVC

python - 从 python 中的密码制作 RSA key

c - 进程之间如何共享内存区域

java - 使用JAVA加密和乱码音频文件

c++ - do while 和 switch 错误

c++ - 特定名称的结构导出数据

c++ - 需要帮助创建 C++ 成员函数来表示 RTOS microcos III 的任务

c++ - 在 Visual C++ 中传递给函数时,Sizeof 数组自动更改

c - 为什么我在增量错误中得到无效的左值