公钥pem编码,C/C++中将PEM转换为PublicKey
时间: 2024-01-15 20:03:28 浏览: 33
在C/C++中将PEM格式的公钥转换为PublicKey对象的步骤如下:
1. 将PEM格式的公钥字符串读取到一个char数组中。
2. 去掉PEM格式字符串中的头部和尾部,只保留公钥部分。
3. 将剩余的公钥部分进行Base64解码,得到公钥的二进制数据。
4. 将公钥的二进制数据转换为PublicKey对象。
下面是一个示例代码:
```c
#include <openssl/pem.h>
#include <openssl/rsa.h>
#include <openssl/err.h>
#include <openssl/bio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
RSA* get_public_key(const char *pem_public_key)
{
const char *header = "-----BEGIN PUBLIC KEY-----";
const char *footer = "-----END PUBLIC KEY-----";
// 去掉PEM格式字符串中的头部和尾部,只保留公钥部分。
const char *pem_public_key_start = strstr(pem_public_key, header);
const char *pem_public_key_end = strstr(pem_public_key, footer);
if (pem_public_key_start == NULL || pem_public_key_end == NULL)
return NULL;
pem_public_key_start += strlen(header);
int pem_public_key_len = pem_public_key_end - pem_public_key_start;
char *pem_public_key_body = (char *)malloc(pem_public_key_len + 1);
memcpy(pem_public_key_body, pem_public_key_start, pem_public_key_len);
pem_public_key_body[pem_public_key_len] = '\0';
// 对剩余的公钥部分进行Base64解码,得到公钥的二进制数据。
BIO *bio = BIO_new_mem_buf(pem_public_key_body, -1);
RSA *rsa = PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL);
free(pem_public_key_body);
return rsa;
}
```
注意:上面的代码使用了OpenSSL库来完成PEM格式的公钥转换,如果你要使用其他库,请相应地修改代码。另外,代码中使用了C语言的标准库函数和动态内存分配函数,你也可以使用其他方式来完成这项工作。