Декодирование шестнадцатеричного значения с помощью Crypto++

Я новичок в Cryptopp, и я хотел кодировать текст и декодировать обратно, чтобы понять, как это работает. Часть кодирования работает нормально, но я не могу декодировать строку? Всегда декодированная строка пуста. Я спросил в рассылке Crypto, и кто-то сказал, что этот код должен работать, но это не так.

Я хотел бы знать, что не так. Будучи новичком в криптографии, я не вижу, что не так.

Код:

std::string encoded = m_pkey->GetValue().ToStdString();//here under debugger its ok
std::string decoded;
CryptoPP::StringSource(encoded, true, new CryptoPP::HexDecoder(new CryptoPP::StringSink(decoded)));

person Stefano Mtangoo    schedule 25.06.2013    source источник


Ответы (2)


В вики Crypto++ есть ряд примеров, включая использование HexEncoder и HexDecoder.

Из вики:

byte decoded[] = { 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88, 
                   0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00 };
string encoded;

StringSource ss(decoded, sizeof(decoded), true,
    new HexEncoder(
        new StringSink(encoded)
    ) // HexEncoder
); // StringSource

cout << encoded << endl;
...

$ ./cryptopp-test.exe
FFEEDDCCBBAA99887766554433221100
person jww    schedule 02.10.2013

Модель, использованная в приведенном выше ответе, называется шаблоном «конвейер» в Crypto++. См. статью Crypto++ о конвейеризации.

Обратите внимание на правила, которые применяются к владению объектом: если вы передаете указатель на объект в конструктор, этот объект будет принадлежать только что созданному объекту и будет удален в его деструкторе. Если объект передается в конструктор по ссылке, объект должен оставаться в живых на протяжении жизни вновь построенного объекта, т.е. вы сохраняете право собственности и не должны удалять его из-под носа у нового объекта!

person Nicko    schedule 25.10.2013