通常,用户将拥有 PEM 编码的 RSA 私钥。Crypto++ 要求这些密钥为 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++ 中进行转换,以便用户可以提供任何一种格式和“正常工作”的东西。感谢您的任何建议。