我正在编写一个使用std::cin
然而不太可能,我试图避免密码从内存中分页到磁盘的可能性,所以我想修改std::cin
的缓冲区以便在我完成后立即覆盖密码。
现在我有这个:
std::cin.clear();
std::stringstream ss;
ss << "0000000000000000000000000000000000000000000000";
std::cin.rdbuf(ss.rdbuf());
std::cin.clear();
但我很确定这很糟糕,因为它没有考虑cin缓冲区的当前大小。 如何正确覆盖缓冲区的内容?
感谢您的帮助!
答案 0 :(得分:2)
即使你立即乱涂缓冲区,仍然可以将密码写入磁盘。系统的i / o缓冲区可能被分页到磁盘,std :: cin所在的工作内存也是如此。我曾经开发过取证软件,这些软件完全嗅出了这些条件。
答案 1 :(得分:1)
您可以使用gptr()
和egptr()
来获取缓冲区的开头和结尾。
编辑:正如Charles Bailey所指出的,这些都受到了保护。我的假设是,如果你想要一个流缓冲区,你可以在指定的时间清除它的内容,你将实现自己的一个从一个标准流缓冲区类派生,但提供clear()
成员(或任何你觉得方便的名字)。在没有缓冲管理器知道的情况下更改缓冲区的内容通常会是一件非常糟糕的事情......