Load PEM codificó la clave privada RSA en Crypto ++

Muchas veces, el usuario tendrá claves privadas RSA codificadas por PEM. Crypto ++ requiere que estas claves estén en formato DER para cargar. He estado pidiendo a la gente que convierta manualmente sus archivos PEM a DER de antemano usando openssl de esta manera:

openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der

Eso funciona bien, pero algunas personas no entienden cómo hacerlo ni quieren hacerlo. Por lo tanto, me gustaría convertir archivos PEM a archivos DER automáticamente dentro del programa.

¿Es tan simple como quitar el "----- BEGIN CERTIFICATE -----" y "----- END CERTIFICATE -----" del PEM o también se requiere alguna otra transformación? Me han dicho que entre esos marcadores es simplemente DER codificado en b64. Aquí hay un código que demuestra el problema:

// 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
}

Me gustaría evitar hacer llamadas al sistema para openssl y hacer la transformación por completo en Crypto ++ para que los usuarios puedan proporcionar el formato y las cosas "simplemente funcionan". Gracias por cualquier consejo.

Respuestas a la pregunta(6)

Su respuesta a la pregunta