通常情况下,用户会拥有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-----"标识,还是需要进行其他的转换吗?有人告诉我,在这些标识之间只是base64编码的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++中完成转换,以便用户可以提供任何格式并使其“正常工作”。感谢任何建议。