.. немного запутался в использовании их системы Source и Sink.
OK. Именно этот дизайн вдохновлен системой трубопроводов Unix. Если вы понимаете каналы Unix и то, как через них проходит поток данных, вы понимаете Crypto ++ Pipeline .
Например, следующие команды Unix:
cat somefile.bin | hexdump
станет следующей программой Crypto ++:
FileSource fs("somefile.bin", true /*pumpAll*/, new HexEncoder(new FileSink(cout)));
У меня есть скелет кода, который делает MD5, но мне нужен код ... для Adler32 ...
Как показал Исмаил, это так просто, как:
Adler32 adler32;
string digest;
FileSource fs(filename.c_str(), true /*pumpAll*/,
new HashFilter(adler32,
new HexEncoder(
new StringSink(digest))));
Но вот подсказка: в Crypto ++ данные передаются от Sources до Sinks . Между ними встречаются фильтры , которые преобразуют данные.
Выше у вас есть два фильтра: HashFilter и HexEncoder . Все фильтры наследуются от BufferedTransformation
, поэтому все они могут быть согласованно объединены в цепочку.
Adler32
сам по себе не является фильтром. Но он наследуется от HashTransformation
, и это то, что HashFilter использует. Таким образом, вы можете поменять любой объект на основе HashFilter , и все будет просто работать.
Вы можете найти список объектов HashFilter на Ссылка класса HashTransformation . Они включают в себя все хэши (например, MD5, SHA и Whirlpool), Adler32 и CRC32.