〔OpenSSL〕读取certificate.pem以获得C语言RSA格式的公钥



我对OpenSSL和密钥格式一无所知。我用的是C语言

我想使用C.将我的pem格式的证书文件(ABCcert.pem文件-它以-----BEGIN certificate-----开始,以-----END certificate-----结束(更改为RSA公钥

换句话说,我有一个pem格式的证书,我想从中取出公钥并加密我的消息。

我使用openssl控制台找到了很多不错的答案,但我只想使用C语言。

有人能帮忙吗?

您想要PEM_read_X509():

X509 *PEM_read_X509(FILE *fp, X509 **x, pem_password_cb *cb, void *u);
.
.
.

PEM读取函数都接受一个参数TYPE**x并返回一个TYPE*指针。其中TYPE是函数使用的任何结构。如果x为NULL,则忽略该参数。如果x不为NULL,但*x为NULL,则返回的结构将写入*x。如果x和*x都不为NULL,则会尝试重用*x处的结构(但请参阅BUGS和示例部分(。不管x的值是多少,总是返回指向结构的指针(如果发生错误,则返回NULL(。

写入私钥的PEM函数采用enc参数,该参数指定要使用的加密算法,加密在PEM级别完成。如果此参数设置为NULL,则私钥以未加密的形式写入。

cb参数是在查询用于加密PEM结构(通常只有私钥(的通行短语时使用的回调。

对于PEM写入例程,如果kstr参数不为NULL,则使用kstr处的klen字节作为密码短语,并忽略cb。

如果cb参数设置为NULL,而u参数不为NULL,则u参数将被解释为以NULL结尾的字符串,用作密码短语。如果cb和u都为NULL,则使用默认的回调例程,该例程通常会在关闭回显的情况下提示当前终端上的密码短语

您可能只需要这样的东西:

FILE *pemFile = fopen(...);
X509 *x509 = PEM_read_X509( pemFile, NULL, NULL, NULL );

一旦您有了X509证书,就可以使用X509_get_pubkey()获得RSA公钥:

#include <openssl/x509.h>
EVP_PKEY *X509_get_pubkey(X509 *x);
EVP_PKEY *X509_get0_pubkey(const X509 *x);

最新更新