Невозможно загрузить сгенерированный 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