このトピックを再び持ち出して申し訳ありませんが、別の同様の質問を注意深く読み ました。
ただし、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[] として使用し、後でそれをクリアする努力は、あまりメリットがありません。
教えてください。