以"simple"形式获取 RSA 密钥

Get RSA keys in a "simple" form

本文关键字:RSA 密钥 获取 simple      更新时间:2023-10-16

如何获取 OpenSSL 生成的 RAW 形式的密钥?我的意思是我无法在任何在线工具中解码我的编码消息。我应该执行哪些操作才能以正确的形式将密钥分发到其他客户端(在其他应用和 Web 应用中)?我的生成代码是:

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] = '';
    m_publicKey[pub_len] = '';
    BIO_free_all(pub);
    BIO_free_all(pri);
    std::cout << "nnn" << m_privateKey << "nnn";
}

示例输出为:

-----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 -----端 RSA 私钥

-----

我应该以这种形式分发此密钥,还是需要它而不添加其他文本和""?我尝试删除页眉、页脚、""字符和 base64 解码。但这并没有帮助。

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

您的私钥采用 PKCS#8 标准形式,被广泛使用。

例如,您可以使用openssl解密RSA消息

openssl rsautl -decrypt -inkey privkey.pem < ciphertex.bin > plaintext.bin

这里privkey.pem是一个包含您的私钥的文件。 ciphertex.bin是一个包含加密消息的文件,plaintext.bin将包含解密的消息。