Middle
Zašto je char[] poželjniji od String za skladištenje lozinke?
sobes.tech АИ
Одговор од АИ
Objekti tipa String su nepromenljivi. To znači da, jednom kada se kreira niz, njegov sadržaj ne može biti izmenjen. Ako sačuvate lozinku u String, ona će ostati u memoriji dok je sakupljač smeća ne ukloni. Tokom tog vremena, napadač može pristupiti memoriji i pročitati lozinku.
Nizovi char[] su modifikabilni. Nakon korišćenja lozinke sačuvane u char[], možete eksplicitno prepisati elemente niza, na primer, nul karakterima. Ovo garantuje da će lozinka biti uklonjena iz memorije čim više ne bude potrebna, znatno smanjujući rizik od curenja.
Pored toga, rad sa stringovima nosi rizik od pravljenja dodatnih kopija u pool-u stringova (string pool), što takođe produžava vreme zadržavanja lozinke u memoriji.
// Primer skladištenja lozinke u `char[]` i njenog čišćenja
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};
// Korišćenje lozinke (npr. za autentifikaciju)
// ...
// Čišćenje niza nakon korišćenja
java.util.Arrays.fill(password, ' ');
// Sada je lozinka uklonjena iz memorije