質問: パスワードのためになぜchar []がstringよりも好まれるのですか? swingでは、パスワードフィールドは通常のgetpassword()(returns string)メソッドの代わりにgettext()(returns char[])メソッドを持ちます。同様に、パスワードを扱うのにstringを使わないという提案に出会いました。パスワードに関してstringがセキュリティに脅威を与えるのはなぜですか? char[]を使うのは不便です。
回答: 1)パスワードをプレーンテキストとして保存するとjavaでは文字列が不変になるため、ガベージコレクタがパスワードをクリアするまでメモリ内で使用できるようになります。長期間にわたってセキュリティが脅かされます。メモリダンプへのアクセス権を持っている人なら誰でも平文でパスワードを見つけることができるので、それは別の理由です。平文よりも常に暗号化されたパスワードを使うべきです。文字列は不変なので、変更すると新しい文字列が生成されるため、文字列の内容を変更することはできません。一方、char []の場合は、すべての要素を空白またはゼロに設定できます。そのため、パスワードを文字配列に格納すると、パスワードを盗むことによるセキュリティ上のリスクが軽減されます。2)java自体が、char []を返すjpasswordfieldのgetpassword()メソッドと、セキュリティ上の理由からパスワードをクリアテキストで返すgettext()メソッドの使用を推奨します。 javaチームからのアドバイスに従い、それに反対するのではなく標準に従うことをお勧めします。