Це все причини. Для пароля слід вибрати масив char [] замість String .
1. Оскільки Strings незмінні в Java, якщо ви зберігаєте пароль як звичайний текст, він буде доступний у пам'яті, поки збирач сміття не очистить його, а оскільки String використовується в пулі String для повторного використання, є досить великий шанс, що він буде залишаються в пам’яті на тривалий час, що становить загрозу безпеці.
Оскільки кожен, хто має доступ до дампа пам’яті, може знайти пароль у чистому тексті, це ще одна причина, що ви завжди повинні використовувати зашифрований пароль, а не звичайний текст. Оскільки рядки незмінні, то зміст рядків не може бути змінено, оскільки будь-яка зміна призведе до появи нового String, тоді як якщо ви використовуєте char [], ви все одно можете встановити всі елементи як порожні або нульові. Тому зберігання пароля в масиві символів явно зменшує ризик безпеки викрадення пароля.
2. Сама Java рекомендує використовувати метод getPassword () JPasswordField, який повертає char [], замість застарілого методу getText (), який повертає паролі в чіткому тексті із зазначенням причин безпеки. Добре дотримуватися порад команди Java та дотримуватися стандартів, а не йти проти них.
3. У String завжди є ризик друкувати звичайний текст у файлі журналу чи консолі, але якщо ви використовуєте масив, ви не будете друкувати вміст масиву, а натомість його місце в пам'яті надрукується. Хоч це і не є справжньою причиною, але все ж має сенс.
String strPassword="Unknown";
char[] charPassword= new char[]{'U','n','k','w','o','n'};
System.out.println("String password: " + strPassword);
System.out.println("Character password: " + charPassword);
String password: Unknown
Character password: [C@110b053
Посилання з цього блогу . Я сподіваюся, що це допомагає.