使用OpenSSL从内存中读取公钥/私钥

我在我的项目中使用公钥/私钥来加密/解密一些数据。

我在服务器上托管公钥(“public.pem”)。

“public.pem”看起来像这样:

-----BEGIN PUBLIC KEY----- ..... ..... -----END PUBLIC KEY----- 

我编写了一个客户端,下载此公钥并将其保存到磁盘,然后使用文件描述符将OpenSSL的PEM_read_RSA_PUBKEY()调用到该文件。 此操作很有效,结果是一个准备加密的RSA对象。

我想避免每次都将公钥写入磁盘(因为我已经在内存中有缓冲区)。

如何在不将缓冲区保存到磁盘的情况下执行相同的操作? 我注意到一个名为PEM_read_bio_RSAPublicKey()的函数,但我不确定它是否使用了BIO结构。 我在正确的道路上吗?

所以真正的问题是:如何直接从内存而不是文件描述符中读取RSA对象的公钥/私钥。

你走在正确的轨道上。 您必须通过BIO_new_mem_buf()通过BIO缓冲区将PEM密钥包装在内存中。 换句话说,类似于:

 BIO *bufio; RSA *rsa bufio = BIO_new_mem_buf((void*)pem_key_buffer, pem_key_buffer_len); PEM_read_bio_RSAPublicKey(bufio, &rsa, 0, NULL); 

相同的方法对RSA私钥有效(通过PEM_read_bio_RSAPrivateKey ),但在这种情况下,您肯定需要满足密码短语。 有关详细信息,请查看手册页 。

SquareRootOfTwentyThree的方法对我不起作用。 这是我的解决方案。

 BIO* bio = BIO_new(BIO_s_mem()); int len = BIO_write(bio, pem_key_buffer, pem_key_buffer_len); EVP_PKEY* evp_key = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL); RSA* rsa = EVP_PKEY_get1_RSA(evp_key);