我正在尝试从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传递给它!
答案 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句柄。你可以像使用两个插座一样安全地相互通信。