【问题标题】:OpenSSL, reading public RSA key from CStringOpenSSL,从 CString 读取公共 RSA 密钥
【发布时间】:2013-01-24 13:00:51
【问题描述】:

我正在尝试从 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 传递给它!

【问题讨论】:

    标签: c++ openssl rsa


    【解决方案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, ...);
    

    【讨论】:

    • 非常感谢,我很难真正理解 BIO 的工作原理!
    • @darkheir 免责声明:这仅来自文档。我自己没有试过这个;-)
    【解决方案2】:

    OpenSSL 中的 BIO 类似于文件句柄。您可以使用一对它们来安全地相互通信,就像使用两个套接字一样。

    here a detailed explanation with some example code

    【讨论】:

      猜你喜欢
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多