Часто пользователи имеют секретные ключи RSA, закодированные PEM. Crypto ++ требует, чтобы эти ключи были в формате DER для загрузки. Я просил людей вручную конвертировать свои файлы PEM в DER заранее, используя openssl следующим образом:
openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der
Это хорошо работает, но некоторые люди не понимают, как это сделать и не хотят. Поэтому я хотел бы автоматически конвертировать файлы PEM в файлы DER внутри программы.
Это так же просто, как разметка "----- BEGIN CERTIFICATE -----" и "----- КОНЕЦ СЕРТИФИКАТА -----" из PEM или требуется другое преобразование? Мне сказали, что между этими маркерами он просто кодирует 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 ++, чтобы пользователи могли предоставить либо формат, либо "просто работать". Спасибо за любой совет.