Sobes.tech
Middle

Prečo je char[] preferovanejšie ako String na uloženie hesla?

sobes.tech AI

Odpoveď od AI

Objekty typu String sú nemenné. To znamená, že po vytvorení reťazca jeho obsah nemôže byť zmenený. Ak uložíte heslo do String, zostane v pamäti, kým ho neodstráni zberač odpadu. Počas tohto času môže útočník získať prístup k pamäti a prečítať heslo.

Polia char[] sú modifikovateľné. Po použití hesla uloženého v char[] môžete explicitne prepísať prvky poľa, napríklad nulovými znakmi. To zabezpečí, že heslo bude odstránené z pamäti hneď, ako už nebude potrebné, čím sa výrazne znižuje riziko úniku.

Okrem toho, pri práci s reťazcami existuje riziko vytvárania ďalších kópií v pooli reťazcov (string pool), čo tiež predlžuje dobu, počas ktorej zostáva heslo v pamäti.

// Príklad uloženia hesla do `char[]` a jeho vymazania
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// Použitie hesla (napríklad na autentifikáciu)
// ...

// Vymazanie poľa po použití
java.util.Arrays.fill(password, ' ');

// Teraz je heslo odstránené z pamäti