gmssl 将const char* 型不带start line 的 base64 编码的私钥转成EC_KEY*
时间: 2023-08-05 20:02:03 浏览: 136
您好,针对您的问题,可以使用以下代码将const char*型不带start line的base64编码的私钥转成EC_KEY*:
```c++
#include <openssl/ec.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/pem.h>
EC_KEY* base64_to_EC_key(const char* b64_key) {
EC_KEY* ec_key = NULL;
BIO* bio = NULL;
BUF_MEM* buf = NULL;
// 将base64编码的私钥解码
bio = BIO_new(BIO_s_mem());
BIO_write(bio, b64_key, strlen(b64_key));
BIO_flush(bio);
BIO_get_mem_ptr(bio, &buf);
if (buf->length <= 0) {
goto end;
}
// 将解码后的私钥导入到EC_KEY结构体中
ec_key = d2i_ECPrivateKey(&ec_key, (const unsigned char**)&buf->data, buf->length);
if (ec_key == NULL) {
goto end;
}
end:
if (bio != NULL) {
BIO_free(bio);
}
if (buf != NULL) {
BUF_MEM_free(buf);
}
return ec_key;
}
```
其中,b64_key为输入的base64编码的私钥,返回值为EC_KEY*类型的指针。函数内部使用BIO_new()函数将输入字符串构造成BIO对象,再使用d2i_ECPrivateKey()函数将解码后的私钥导入到EC_KEY结构体中,并返回EC_KEY*类型的指针。需要注意的是,函数中的错误处理部分需要根据实际情况进行修改。
阅读全文