代码之家  ›  专栏  ›  技术社区  ›  Pedro d'Aquino

透明地操作插入到Ostream中的字符串

  •  2
  • Pedro d'Aquino  · 技术社区  · 15 年前

    我想提供一个 std::ostream 从用户的角度来看,这可能会也可能不会加密其内容。

    假设某个随机函数使用 std::ostream& :

    void write_stuff( std::ostream& stream ) {
        os << "stuff";
    }
    

    是否 stuff 输出是明文还是加密取决于 stream 参数已初始化。

    我在考虑继承 std::basic_streambuf 但我不确定这是最好的方式。我认为理想的场景是在内容实际输出之前运行的某种过滤对象。这样就可以很容易地进行连锁操作,例如加密和十六进制编码,这是我自己的优势 basic_streambuf 似乎不会给予(至少不容易)。

    有什么建议吗?

    谢谢。

    更新 :我遵循了公认答案所规定的策略。我发现这篇文章是关于 custom streambuf which performs XOR obfuscation 作为一个起点非常有用。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Omnifarious    15 年前

    streambuf

    ostream rdbuf

    aes_ctr_streambuf encrypter(key);
    zlib_streambuf compressor;
    ::std::cout << stack_streambuf(encrypter) << stack_streambuf(compressor);
    
        3
  •  0
  •   ereOn    15 年前

    #include <iostream>
    #include <iomanip>
    
    int main(int, char**)
    {
      int a = 10;
      std::cout << "a: " << a << std::endl; //outputs: "a: 10"
      std::cout << "a: " << std::hex << a << std::endl; //outputs: "a: a"
      std::cout << "a: " << std::dec << a << std::endl; //outputs: "a: 10"
    
      return EXIT_SUCCESS;
    }