Невозможно загрузить сгенерированный Putty открытый ключ, используя crypt++

Я пытаюсь загрузить открытый ключ RSA, созданный PuttyGen, используя следующий код. общедоступный RSA KEY:

 ---- BEGIN SSH2 PUBLIC KEY ----
    Comment: "rsa-key-20171105"
    AAAAB3NzaC1yc2EAAAABJQAAAQEAxxOMyTciaYLBHegVq7vj90jseYGhby+e6rVL
    jyy7h9Es10EfMQv2jii+505G2ZbkpDp9mjOA3aAEtyDzkwOBtZwL3VRO6A37yiLd
    0kMEwKhRNbPKsqfsM96BumO5icUQHs3QQjNWKbFOsbvE1tHj/BIvAEiYsPY+0sz3
    1DMZvtGSzy4XmywMTesOI7PhyBANTJ7TwSo76MS2s65XP5RoH2HnzSNLc3VXT9Mg
    cg/eSS39zDpsJQW8r3+C27Yrb3HLmU01dSf3d3xxvjB7TMbu1HtWg71w7Bg/nCpO
    qX5w1rtEg1721eJGT7r5/pcqYfd41QogoXh1JfQSssJcz+Ou7w==
---- END SSH2 PUBLIC KEY ----

Удалены заголовок, нижний колонтитул, строки комментариев.

КОД:

int main()
{
    std::string keystr =   
    "AAAAB3NzaC1yc2EAAAABJQAAAQEAxxOMyTciaYLBHegVq7vj90jseYGhby+e6rVL
    jyy7h9Es10EfMQv2jii+505G2ZbkpDp9mjOA3aAEtyDzkwOBtZwL3VRO6A37yiLd
    0kMEwKhRNbPKsqfsM96BumO5icUQHs3QQjNWKbFOsbvE1tHj/BIvAEiYsPY+0sz3
    1DMZvtGSzy4XmywMTesOI7PhyBANTJ7TwSo76MS2s65XP5RoH2HnzSNLc3VXT9Mg
    cg/eSS39zDpsJQW8r3+C27Yrb3HLmU01dSf3d3xxvjB7TMbu1HtWg71w7Bg/nCpO
    qX5w1rtEg1721eJGT7r5/pcqYfd41QogoXh1JfQSssJcz+Ou7w==";

    // Base64 decode, place in a ByteQueue    
    ByteQueue queue;
    CryptoPP::Base64Decoder decoder;

    decoder.Attach(new CryptoPP::Redirector(queue));
    decoder.Put((const byte*)keystr.data(), keystr.length());
    decoder.MessageEnd();

    // Write to file for inspection
    FileSink fs("decoded-pub-key.der");
    queue.CopyTo(fs);
    fs.MessageEnd();

    try
    {
        CryptoPP::RSA::PublicKey rsaPublicKey;
        rsaPublicKey.BERDecodePublicKey(queue, false /*paramsPresent*/, queue.MaxRetrievable());

        // BERDecodePrivateKey is a void function. Here's the only check
        // we have regarding the DER bytes consumed.
        assert(queue.IsEmpty());

        AutoSeededRandomPool prng;
        bool valid = rsaPublicKey.Validate(prng, 3);
        if (!valid)
            cerr << "RSA public key is not valid" << endl;

        cout << "N:" << rsaPublicKey.GetModulus() << endl;
        cout << "E:" << rsaPublicKey.GetPublicExponent() << endl;
        //cout << "D:" << rsaPublicKey.GetPrivateExponent() << endl;

    }
    catch (const std::exception& ex)
    {
        cerr << ex.what() << endl;
        exit(1);
    }
    return 0;
}

Получаю "Ошибка декодирования BER".

Попробовал следующий, но та же ошибка, не может BER декодировать открытый ключ RSA

0 ответов

Другие вопросы по тегам