调用OpenSSL库实现RSA加解密和签名操作
说明
RSA公钥可以从证书或公钥文件提取,RSA私钥可以从私钥文件中提取。OpenSSL使用了一种BIO抽象IO机制读写所用文件,可以打开文件相关联的BIO,通过BIO读写文件内容。
编译命令:gcc -o test test_pubkey_pem.c -lcrypto -std=c99
代码示例
// 证书、私钥、公钥都是PEM格式文件
#include <openssl/x509.h>
#include <openssl/pem.h>
#include<stdio.h>
#include<string.h>
// 文件路径
char cert_filename[] = "/root/test.crt";
char pubkey_filename[] = "/root/testpub.pem";
char prikey_filename[] = "/root/testpri.pem";
int main() {
EVP_PKEY *pkey;
BIO *pubkey_bio;
BIO *prikey_bio;
BIO *cert;
/************ 从证书中提取公钥 ****************/
// 打开证书文件
cert = BIO_new_file(cert_filename, "r");
if (cert == NULL) {
printf("read cert error");
return -1;
}
// 读入X509证书
X509 * x_cert = PEM_read_bio_X509(cert, NULL, NULL, NULL);
BIO_free(cert);
// 提取出密钥EVP_PKEY结构
pkey = X509_get_pubkey(x_cert);
// 提取出RSA结构的公钥
RSA* rsa_from_cert = EVP_PKEY_get1_RSA(pkey);
X509_free(x_cert);
EVP_PKEY_free(pkey);
// 打印公钥的值
BIO * print_out=BIO_new