gpt4 book ai didi

c++ - 在 Crypto++ 中加载 PEM 编码的私有(private) RSA key

转载 作者:IT老高 更新时间:2023-10-28 23:18:28 26 4
gpt4 key购买 nike

通常,用户将拥有 PEM 编码的 RSA 私钥。 Crypto++ 要求这些 key 为 DER 格式才能加载。我一直在要求人们事先使用 openssl 手动将他们的 PEM 文件转换为 DER,如下所示:

openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der

这很好,但有些人不明白如何做,也不想这样做。所以我想在程序中自动将 PEM 文件转换为 DER 文件。

是像从 PEM 中剥离“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”一样简单,还是还需要其他一些转换?有人告诉我,在这些标记之间,它只是 b64 编码的 DER。下面是一些演示该问题的代码:

// load the private key
CryptoPP::RSA::PrivateKey PK;
CryptoPP::ByteQueue bytes;

try
{
CryptoPP::FileSource File( rsa.c_str(), true, new CryptoPP::Base64Decoder() );
File.TransferTo( bytes );
bytes.MessageEnd();

// This line Causes BERDecodeError when a PEM encoded file is used
PK.Load( bytes );
}

catch ( CryptoPP::BERDecodeErr )
{
// Convert PEM to DER and try to load the key again
}

我想避免对 openssl 进行系统调用并完全在 Crypto++ 中进行转换,以便用户可以提供任何一种格式和“正常工作”的东西。感谢您的建议。

最佳答案

是的,它是使用 Base64 编码的 DER 流。但请注意,除了剥离 BEGIN 和 END 标记外,在 RSA key 格式的情况下,您还需要剥离可能插入 BEGIN 标记和编码数据之间的任何标志。只有剩下的部分才能成功Base64解码。您似乎将完整的证书文件提供给解码器,需要修复。

关于c++ - 在 Crypto++ 中加载 PEM 编码的私有(private) RSA key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9815001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com