【问题标题】:openssl create rsa key pair in C and export itopenssl 在 C 中创建 rsa 密钥对并将其导出
【发布时间】:2012-08-16 14:29:43
【问题描述】:

我想在 C/C++ 中创建一个 RSA 密钥对并将其导出为字符串以使用它。

我设法创建了密钥

rsa = RSA_generate_key(bits, exp, NULL, NULL);
if(RSA_check_key(rsa)!=1){
    std::cout << "Error while checking key" << std::endl << std::flush;
}

pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);

从这一点开始,我可以使用 PEM_write_PUBKEY() 和 PEM_write_PrivateKey() 将私钥和公钥写入文件。但我想要做的是将 pkey 中的私钥和公钥直接放入一个变量中,最好采用 PEM 格式。我已经环顾四周,但找不到合适的功能。有什么提示吗?

【问题讨论】:

    标签: c openssl export rsa


    【解决方案1】:

    如果您真的需要 PEM 表示,那么 PEM_write_bio_RSA_PUBKEY()PEM_write_bio_RSAPrivateKey()(以及它们的 read 对应物)就是您想要的功能;给他们内存 BIO 让他们写入内存缓冲区。

    您可以通过调用例如创建内存BIO

    BIO * b = BIO_new(BIO_s_mem());
    

    并通过调用获取内存缓冲区

    void * buf;
    BIO_get_mem_ptr(b, &buf);
    

    您还可以通过调用例如在现有内存周围创建内存BIO

    BIO * b = BIO_new_mem_buf(buf, 9001)
    

    但生成的 BIO 将是只读的。

    【讨论】:

    • 我将如何导出到 PKCS#1 DER(没有 base64 的东西)。其他一些格式(PKCS#8、PKCS#12 等)呢?
    • @Uri 对于 DER,您需要 i2d_* 系列函数,它将内存缓冲区作为第二个参数。要在 PKCS8 中导出,您需要 PEM_write_bio_PKCS8PrivateKeyi2d_PKCS8PrivateKey_bio,具体取决于格式。要导出 PKCS12 对象,您需要 i2d_PKCS12_bio,但您必须首先使用 PKCS12_create 构造 PKCS12。
    • 另外根据 openssl 文档 RSA_generate_key 现在已弃用,您应该使用 RSA_generate_key_ex - openssl.org/docs/crypto/RSA_generate_key.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多