1

ここで私の状況では、アプリケーションのユーザーは、アプリケーションを起動するためにパスワードを入力するよう求められます。パスワードを取得するには、次を使用します。

char c;  
std::string password;
while ...  // until the end of entry
{
    c = fgetc(stdin);
    password += c;
}

パスワードがチェックされたら、変数を破棄して、プログラムのコア イメージを使用して取得できないようにします。たとえば、誰かが「gcore」コマンドを使用して、生成されたコアでパスワードを検索しても、それは見つかりません。

しかし、私の場合、まだ標準入力バッファーにあるように見えるため、パスワード値を取得できます。

だから私の質問は、ユーザーが入力した値をメモリで使用できなくするために、標準入力バッファをクリアするにはどうすればよいですか?

私がすでに試した情報については、fflush、__fpurge、fwrite(標準入力ストリームの最初の位置から)...そして何も機能していないようです。

前もって感謝します。

4

4 に答える 4

3

私の答えは次のとおりです。スタンド I/O ストリームを使用しないでください。代わりに raw ファイル I/O を使用してください。

read(STDIN_FILENO, ...)

独自の行バッファリングを行う必要がありますが、ライブラリ内の何も入力のバッファを保持していないことを保証できます。

于 2013-07-30T18:32:58.477 に答える