Oto wszystkie powody, dla których dla hasła należy wybrać tablicę char [] zamiast String .
1. Ponieważ w Javie ciągi są niezmienne, jeśli przechowujesz hasło jako zwykły tekst, będzie ono dostępne w pamięci do momentu wyczyszczenia go przez moduł zbierający śmieci, a ponieważ ciąg jest używany w puli ciągów do ponownego użycia, istnieje duża szansa, że będzie pozostają w pamięci przez długi czas, co stanowi zagrożenie dla bezpieczeństwa.
Ponieważ każdy, kto ma dostęp do zrzutu pamięci, może znaleźć hasło w postaci zwykłego tekstu, to kolejny powód, dla którego zawsze należy używać hasła szyfrowanego zamiast zwykłego tekstu. Ponieważ ciągi są niezmienne, nie ma możliwości zmiany zawartości ciągów, ponieważ każda zmiana spowoduje powstanie nowego ciągu, a jeśli użyjesz znaku char [], możesz ustawić wszystkie elementy jako puste lub zerowe. Przechowywanie hasła w tablicy znaków wyraźnie zmniejsza ryzyko związane z kradzieżą hasła.
2. Sama Java zaleca stosowanie metody getPassword () JPasswordField, która zwraca char [], zamiast przestarzałej metody getText (), która zwraca hasła w postaci czystego tekstu, podając względy bezpieczeństwa. Warto postępować zgodnie z radami zespołu Java i stosować się do standardów, a nie przeciwstawiać się im.
3. W przypadku Ciągu zawsze istnieje ryzyko drukowania zwykłego tekstu w pliku dziennika lub konsoli, ale jeśli użyjesz Tablicy, nie wydrukujesz zawartości tablicy, ale zamiast tego zostanie wydrukowana jej lokalizacja pamięci. Choć nie jest to prawdziwy powód, nadal ma sens.
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
Referencje z tego bloga . Mam nadzieję, że to pomoże.