Я хотел бы предоставить std::ostream
, который может или не может, с точки зрения пользователя, зашифровать его содержимое.
Представьте себе некоторую случайную функцию, которая использует std::ostream&
:
void write_stuff( std::ostream& stream ) {
os << "stuff";
}
Будет ли stuff
выводиться в виде открытого текста или зашифровано, зависит от того, как был инициализирован аргумент stream
.
Я думаю о наследовании от std::basic_streambuf
, но яне уверен, что это лучший путь.Я думаю, что идеальный сценарий - это какой-то объект фильтра, который запускается до того, как содержимое действительно выводится.Таким образом было бы легко объединять операции, например, шифровать, а затем кодировать в шестнадцатеричном формате, что является преимуществом, так как создание собственного basic_streambuf
, похоже, не дает (по крайней мере, не легко).
Любые советы?
Спасибо.
ОБНОВЛЕНИЕ : Я следовал стратегии, изложенной в принятом ответе.Мне показалось, что эта статья о написании custom streambuf
, которая выполняет обфускацию XOR , чрезвычайно полезна в качестве отправной точки.