【问题标题】:c++ / RSA convert keyc++ / RSA 转换密钥
【发布时间】:2013-10-29 19:12:09
【问题描述】:

我正在尝试使用 RSA 加密某些内容。

但我的 rsa 库无法使用 x509 密钥。 所以我尝试使用 openssl 将其转换为 DER 密钥。

但我真的不明白它是如何工作的。我发现了两个看起来不错的类,但我不知道如何使用它们。

功能是:

-i2d_X509

-X509

我确实找到了一段代码,但我看不懂:

 int len;
 unsigned char *buf, *p;

 len = i2d_X509(x, NULL);

 buf = OPENSSL_malloc(len);

 if (buf == NULL)
      /* error */

 p = buf;

 i2d_X509(x, &p);

如果你能帮助我,那就太好了。

【问题讨论】:

    标签: c++ openssl rsa x509 der


    【解决方案1】:

    i2d_X509 表示将X509 对象从内部表示(即X509 结构)转换为DER 编码表示(复制到缓冲区或文件中)。

    所以,在这行代码中

    len = i2d_X509(x, NULL);
    

    您正在确定在 DER 中表示给定证书所需的缓冲区长度或字节数。

    那么,你分配了那么多内存和 final 语句

    len = i2d_X509(x, &p);
    

    X509 * 证书以DER 格式复制到此缓冲区中。

    您可以将此缓冲区保存在文件中并将其保存为证书文件,例如 .cer、.crt,并且可以使用任何证书工具打开。

    回到你的问题,你可以在你的程序中使用这个缓冲区来接受 DER 证书。

    但是你提到了钥匙,是吗?

    如果您需要RSA 公钥,那么您可以执行以下操作。

    您可能需要先使用X509_get_pubkey 提取密钥,这将在EVP_PKEY 结构中提供密钥。

     EVP_PKEY * pkey;
     pkey = X509_get_pubkey(x);
    
     RSA * rsa;
     rsa = EVP_PKEY_get1_RSA(pkey);
    

    现在,将此RSA 结构输出到DER。

    int len;
    unsigned char *buf, *p;
    
    len = i2d_RSAPublicKey(rsa, buffer, buffer_length);
    

    根据密钥分配buffer 到足够大的长度,例如 4000。

    我想这会对你有所帮助。

    【讨论】:

    • 别忘了拨打RSA_free释放RSA*
    猜你喜欢
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2015-01-21
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多