我对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);