我正在尝试使用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);
如果你可以帮助我,那就太好了。
答案 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.
我认为这会对你有帮助。