4

このトピックを再び持ち出して申し訳ありませんが、別の同様の質問を注意深く読み ました。

ただし、JpasswordField の実装にはまだ抜け穴があると思います。パスワードが、文字列ではなく、おそらく異なるデータ型でメモリに保存されているのをまだ見ています。

私が行った手順: Oracle https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/から JPasswordField デモ コードをダウンロードします 。コンポーネント/PasswordDemoProject/src/components/PasswordDemo.java

そしてそれを実行します。パスワードダイアログが表示されます。

パスワードダイアログ

「バガブー」と入力

Enter キーを押して、パスワードが正しいことを確認します。(入力したパスワードを削除します。最終結果は、この削除の有無にかかわらず同じです)

この時点で、パスワードの内容をクリアするコードにより、

    //Zero out the password.
    Arrays.fill(correctPassword,'0');

記憶にバガブーが残っていないと思いますが、あります。http://www.sweetscape.com/010editor/を使用してメモリの内容を調べましたが、クリア テキストで「bugaboo」が表示されます バガブー

結論: これは、JpasswordField が内部的に PlainDocument を使用し、キー入力された履歴全体がメモリに散らばっているためです。したがって、メモリ内のパスワードのクリア テキストを完全にクリアすることはできません。

したがって、getPassword() を char[] として使用し、後でそれをクリアする努力は、あまりメリットがありません。

教えてください。

4

1 に答える 1