申し訳ありませんが、私はまだJPasswordFieldの実装では抜け穴があると思いますが、私は慎重に別の同様の質問 Why does JPasswordField.getPassword() create a String with the password in it?JPasswordField.getPassword()はまだ保護されていませんか?
を読んだことが、再びこのトピックを表示します。私はまだ文字列ではなく、異なるデータ型のメモリに格納されているパスワードを参照してください。私がやった
をJPasswordFieldのデモコードをダウンロードして実行します。パスワードダイアログが表示されます。 "バガブー"
ヒットで
タイプ入力し、そのパスワードが正しいことを参照してください。
//Zero out the password.
Arrays.fill(correctPassword,'0');
にパスワードの内容をクリアするため、コードには、この時点で今 (私はパスワードで入力を削除し、最終的な結果は、この削除せずに/と同じである)
、私はそこにある期待しかし、メモリ内に残っているバガブーはありません。 私はクリアテキストで「バガブーを」メモリ内容を検討し、まだ見にhttp://www.sweetscape.com/010editor/を使用
結論:この理由はJPasswordFieldのが内部PlainDocumentを使用することであり、ごみキー入力されたものの全体の歴史を持つ、あなたの記憶したがって、メモリ内のクリアテキストを完全にクリアすることはできません。
したがって、getPassword()をchar []として使用して後でクリアするための努力はあまり効果がありません。
私に教えてください。
それはどこか* nu *に保存する必要がありますか? – EJP
@EJPポイントは、 'PlainDocument'を確実にクリアすることができないということです。したがって、この質問に対する答えは「はい」です。 (FWIW IIRCの場合、 'ActionListener'を追加すると' String'も取得されます) –
@ TomHawtin-tacklineポイントは* 'secure'が 'パスワードをメモリに持たない'達成可能なことは、より明白な 'String'ベースの悪用を避けるために、' char [] 'ベースのAPIを提供することです。 – EJP