Использование криптографических потоков в C ++
-
10-10-2019 - |
Вопрос
Я хотел бы использовать некоторые криптографические операции (в основном интегрированная проверка хешсумы). Однако у меня есть проблемы с поиском документаций о выполнении операций такой формы:
bool read(std::istream &in) {
hasher hv(in);
// Do some operations on hv as if it was std::istream
hash_type h = hv.finish ();
hash_type h2 = read_hash(in);
return h == h2;
}
Пса Это может быть другая библиотека при условии, что это а) совместимо с GPL-3 B) Работы на GNU/Linux
Ппс. Я не настаиваю на Crypto ++, однако я хотел бы иметь iostream-подобное поведение для совместимости с другими библиотеками C ++.
Решение
Реализуйте свой собственный iStream Использование Crypto ++.
Другие советы
Crypto ++ Filesource класс берет std::istream&
В конструкторе, похоже, вы закончили.
FileSource (std::istream &in, bool pumpAll,
BufferedTransformation *attachment=NULL)
РЕДАКТИРОВАТЬ
Если вы спрашиваете how to use a hash function on istream in cryptopp
, вот образец, взятый из Cryptopp Wiki, модифицировано мной для использования с istream
:
#include "sha.h"
#include "files.h"
std::string digest;
CryptoPP::SHA256 hash;
CryptoPP::FileSource(in, true, // true here means consume all input at once
new CryptoPP::HashFilter(hash,
new CryptoPP::StringSink(digest)));
std::cout << digest << std::endl;
Это будет читать поток in
до EOF, пропустите его через hash
фильтр и, наконец, результат будет введен в digest
нить.