openssl - 将普通公钥转换为 PEM

标签 openssl type-conversion pem

我已经使用 Prime-256v1 从受信任的应用程序生成了 EC key 对,并将公钥导出到普通操作系统。 key 大小为 65 字节。公钥采用纯格式(仅 key 十六进制)。

导出的公钥需要提供给库(第三方)。该库需要 PEM 格式的公钥。

经过一段时间的搜索,我的理解是先将纯 key 转换为DER格式,然后将结果转换为PEM。但我还没有找到任何用于从普通 key 转换为 DER 或 PEM 的 API。

找到这个API PEM_ASN1_write((i2d_of_void*)i2d_PUBKEY,PEM_STRING_PUBLIC,outfile,ctx->cert->key->public_key,NULL,NULL,0,NULL,NULL);从文件指针转换而来。但我无法进行文件操作,因为无法进行文件存储。我正在缓冲区中获取公钥。

我正在 C 程序中执行此操作,如果有任何示例代码或 API 将普通十六进制 key 转换为 PEM。

提前致谢

最佳答案

使用 openssl 实用程序,您可以使用的命令是:

openssl ec -in .\prime256pubkey.cer -pubin -inform der -pubout -outform pem -out .\prime256pubkey.pem

要使用代码重现此内容,您需要使用这些主要的 openssl api

一个 openssl 示例,转换为围绕 C openssl API 的 C++ 代码,如下所示:

template<typename T, typename D>
std::unique_ptr<T, D> make_handle(T* handle, D deleter)
{
    return std::unique_ptr<T, D>{handle, deleter};
}

bool convert_der_ec_pubkey_to_pem()
{
    // read in DER ec public key
    auto infile = make_handle(BIO_new_file("prime256pubkey.cer", "rb"), BIO_free);
    if(!infile) return false;

    auto const eckey = make_handle(d2i_EC_PUBKEY_bio(infile.get(), nullptr), EC_KEY_free);
    if(!eckey) return false;

    infile.reset();

    // write out PEM ec public key
    auto outfile = make_handle(BIO_new_file("prime256pubkey.pem", "w"), BIO_free);
    if(!outfile) return false;

    return PEM_write_bio_EC_PUBKEY(outfile.get(), eckey.get()) != 0;
}

关于openssl - 将普通公钥转换为 PEM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56218946/

相关文章:

ssl - Debian 9 Tomcat 9 让我们加密 SSL 配置

java - 如何使用java(套接字)连接/远程登录到SPOP3服务器?

c++ - Qt中如何实现OpenSSL?

c++ - 转换运算符到 std::complex<double>

c# - 如何将字符串转换为 bool 值

php - 如何知道 .pem 文件是否正确

android - 无法安装 SSL pem 证书 android 10

c# - 如何使用 OpenSSL.Net C# 包装器通过 AES 加密字符串?

c - PKCS5_PBKDF2_HMAC : binary password

javascript - 将 CSV 转换为带有 header 的 JSON