Questi sono tutti i motivi, si dovrebbe scegliere un array char [] anziché String per una password.
1. Poiché le stringhe sono immutabili in Java, se si memorizza la password come testo normale, sarà disponibile in memoria fino a quando il Garbage Collector non la cancella e poiché String viene utilizzato nel pool di stringhe per la riusabilità, è molto probabile che rimanere in memoria per un lungo periodo, il che rappresenta una minaccia per la sicurezza.
Dal momento che chiunque abbia accesso al dump della memoria può trovare la password in chiaro, questo è un altro motivo per cui dovresti sempre usare una password crittografata piuttosto che un semplice testo. Poiché le stringhe sono immutabili, non è possibile modificare il contenuto delle stringhe poiché qualsiasi modifica produrrà una nuova stringa, mentre se si utilizza un carattere [] è comunque possibile impostare tutti gli elementi come vuoti o zero. Pertanto, la memorizzazione di una password in una matrice di caratteri riduce chiaramente il rischio per la sicurezza di rubare una password.
2. Java stesso consiglia di utilizzare il metodo getPassword () di JPasswordField che restituisce un carattere [], anziché il metodo deprTated getText () che restituisce le password in testo chiaro indicando motivi di sicurezza. È bene seguire i consigli del team Java e aderire agli standard piuttosto che andare contro di essi.
3. Con String esiste sempre il rischio di stampare testo normale in un file di registro o in una console, ma se si utilizza un array non si stampa il contenuto di un array, ma viene stampata la posizione di memoria. Sebbene non sia una vera ragione, ha ancora senso.
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
Riferito da questo blog . Spero che questo possa essere d'aiuto.