多くの場合、ユーザーはPEMでエンコードされたRSA秘密鍵を持っています。Crypto ++をロードするには、これらのキーがDER形式である必要があります。私は、次のようなopensslを使用して、事前にPEMファイルをDERに手動で変換するように人々に求めてきました。
openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der
それはうまくいきますが、それを行う方法を理解していない人もいれば、したくない人もいます。そこで、プログラム内でPEMファイルをDERファイルに自動的に変換したいと思います。
PEMから「-----BEGINCERTIFICATE-----」と「-----ENDCERTIFICATE-----」をストライピングするのと同じくらい簡単ですか、それとも他の変換も必要ですか?これらのマーカーの間では、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 ++で完全に変換を実行して、ユーザーがいずれかの形式と「正常に機能する」ものを提供できるようにしたいと思います。アドバイスありがとうございます。