OpenSSL,从CString读取公共RSA密钥

时间:2013-01-24 13:00:51

标签: c++ openssl rsa

我正在尝试从CString读取RSA公钥。在我从文件中进行操作之前,它很简单,我正在使用:

RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x, pem_password_cb *cb, void *u);

但现在我无法使用此方法。这就是我考虑使用的原因:

RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x, pem_password_cb *cb, void *u);

但是我不理解BIO *bp参数以及如何将CString传递给它!

2 个答案:

答案 0 :(得分:1)

来自bio(3)文档

  

BIO是一种I / O抽象,它隐藏了应用程序的许多底层I / O细节。如果应用程序使用BIO作为其I / O,它可以透明地处理SSL连接,未加密的网络连接和文件I / O.

对于您的情况,我猜BIO_s_mem(3)是正确的类型

  

内存BIO是源/宿BIO,它使用内存作为其I / O.

  

BIO * BIO_new_mem_buf(void * buf,int len);
  ...
  BIO_new_mem_buf()在buf使用len个字节的数据创建一个内存BIO,如果len为-1则假定buf为空终止,其长度由strlen决定。 BIO设置为只读状态,因此无法写入。

所以使用C字符串,我会说这会导致

char rsa_key[1024];
...
BIO *bp = BIO_new_mem_buf(rsa_key, -1);
RSA *rsa = PEM_read_bio_RSA_PUBKEY(bp, ...);

答案 1 :(得分:0)

OpenSSL中的BIO类似于File句柄。你可以像使用两个插座一样安全地相互通信。

here a detailed explanation with some example code