Sobes.tech
Middle

Dlaczego char[] jest lepsze od String do przechowywania hasła?

sobes.tech AI

Odpowiedź od AI

Obiekty String są niezmiennicze. Oznacza to, że po utworzeniu łańcucha jego zawartość nie może zostać zmieniona. Jeśli zapiszesz hasło w String, pozostanie ono w pamięci do momentu usunięcia tego obiektu przez garbage collector. W tym czasie atakujący może uzyskać dostęp do pamięci i odczytać hasło.

Tablice char[] są modyfikowalne. Po użyciu hasła zapisanego w char[], można jawnie nadpisać elementy tablicy, na przykład znakami null. Zapewnia to, że hasło zostanie usunięte z pamięci zaraz po tym, jak przestanie być potrzebne, co znacznie zmniejsza ryzyko wycieku.

Dodatkowo, podczas pracy z łańcuchami istnieje ryzyko tworzenia dodatkowych kopii w puli łańcuchów (string pool), co również zwiększa czas przechowywania hasła w pamięci.

// Przykład przechowywania hasła w char[] i jego czyszczenia
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// Użycie hasła (np. do uwierzytelniania)
// ...

// Czyszczenie tablicy po użyciu
java.util.Arrays.fill(password, ' ');

// Teraz hasło zostało usunięte z pamięci