#c #crypto
#c #крипто
Вопрос:
Кажется, что это был бы простой вопрос, но crypto , похоже, разработан в стиле фанк, «как можно более тупым», так что мне интересно…
Как я могу получить двоичные данные из объекта CryptoPP::base64Decode? Предполагая, что я не хочу записывать это в файл или кодировать каким-либо другим способом, как мне просто получить фактические двоичные данные?
Редактировать: разобрался; не уверен, как закрыть / удалить это, кто-нибудь? Что мне следует сделать здесь сейчас?
Комментарии:
1. Можете ли вы рассказать нам более подробно о том, чего именно вы пытаетесь достичь?
Ответ №1:
Неважно, разобрался. Для справки, я хотел получить методы MaxRetrievable и Get подкласса BufferedTransformation.
Ответ №2:
Кажется, что это был бы простой вопрос, но crypto , похоже, разработан в стиле фанк, «как можно более тупым», так что мне интересно…
Это непростой вопрос, если вы не знакомы с дизайном Crypto . На самом деле работают два проекта.
Сначала выполняется классическое обновление / финал. Это реализовано в Crypto с помощью Put
и Get
и друзей.
Второй — это дизайн с использованием pipleline. Вот где данные перетекают из источника в приемник, и вы увидите это как, например:
FileSource fs( "Hello World", true /*pumpAll*/
new HexEncoder( e,
new FileSink( "encoded.txt" )
); // FileSource
Конвейер эквивалентен командам Unix:
echo "Hello World" | base64 >> encoded.txt
Конвейер обобщается на:
Source -> Filter -> Filter -> ... -> Filter -> Sink
Внутренне Source вызовет Put
первый фильтр; первый фильтр преобразует данные и вызовет Put
второй фильтр, и так далее. Последний фильтр будет вызван Put
на Приемнике. Более правильно, будут вызываться источник и фильтры Put2
, но это детали реализации.
Если нет приемника:
Source -> Filter -> NULL
затем фильтр будет внутренне буферизовать преобразованные данные. Для извлечения данных из фильтра или приемника можно использовать Get
, GetWord16
GetWord32
, MaxRetrievable
AnyRetrievable
,, и т.д.
Put
, Get
, MaxRetrievable
и друзья являются частью BufferedTransformation
интерфейса, и это интерфейс, который реализуют все фильтры и приемники (на самом деле нет необходимости в источнике для его реализации). Если класс не предоставляет Put
, Get
и друзей, то это не фильтр или приемник. Документация для класса находится по адресу BufferedTransformation Class Reference.
Это намного больше, включая блокировку и перекачку данных блоками, но на самом деле это не нужно для фильтра или объекта Base64. pumpAll
В приведенном выше примере означает одновременную передачу всех данных.