Загрузить закрытый ключ RSA, закодированный PEM, в Crypto++.

Часто у пользователя будут закрытые ключи 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-----" и "-----END CERTIFICATE-----" из PEM, или требуется какое-то другое преобразование? ? Мне сказали, что между этими маркерами это просто DER, закодированный b64. Вот некоторый код, демонстрирующий проблему:

// 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++, чтобы пользователи могли указать любой формат, и все «просто работало». Спасибо за любой совет.

12
задан 01100110 22 March 2012 в 01:25
поделиться