通常,用户将拥有PEM编码的RSA私钥。 Crypto ++要求这些密钥以DER格式加载。我一直在问的人手动转换他们的PEM文件事先DER使用OpenSSL的是这样的:在加密++中加载PEM编码的私有RSA密钥
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和执行转换完全加密+,这样可以为用户提供两种格式,事情“只是工作”。感谢您的任何建议。
您是在寻找内存中的解码器,还是在磁盘上的解码器? – 2012-03-25 18:49:36
@OrgnlDave - 任何使用Crypto ++的例子都可以。 – 01100110 2012-03-25 21:01:15
@ 01100110 - Crypto ++现在拥有这种支持作为附加组件。请参阅Crypto ++ wiki上的[PEM Pack](http://www.cryptopp.com/wiki/PEM_Pack)。 – jww 2014-08-24 22:19:29