c ++ / RSA转换键

时间:2013-10-29 19:12:10

标签: c++ openssl rsa x509 der

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

但我的rsa libary并没有能够使用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);

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

1 个答案:

答案 0 :(得分:2)

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

所以,在这行代码

len = i2d_X509(x, NULL);

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

然后,您正在分配那么多内存和最终语句

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.

我认为这会对你有帮助。