0

我正在尝试用 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);

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

4

1 回答 1

2

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

所以,在这段代码中

len = i2d_X509(x, NULL);

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

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

len = i2d_X509(x, &p);

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

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

回到您的问题,您可以在接受 DER 证书的程序中使用此缓冲区。

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

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

您可能需要先提取密钥,方法是使用X509_get_pubkeywhich will give key in EVP_PKEYstructure。

 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。

我想这会对你有所帮助。

于 2013-10-30T04:23:55.137 回答