Middle
Proč je char[] vhodnější než String pro uložení hesla?
sobes.tech AI
Odpověď od AI
Objekty typu String jsou neměnné. To znamená, že jakmile je řetězec vytvořen, jeho obsah nelze změnit. Pokud uložíte heslo do String, zůstane v paměti, dokud ho neodstraní garbage collector. Během této doby může útočník získat přístup k paměti a přečíst heslo.
Pole char[] je možné měnit. Po použití hesla uloženého v char[] jej můžete explicitně přepsat, například nulovými znaky. To zajišťuje, že heslo bude odstraněno z paměti ihned poté, co již není potřeba, což výrazně snižuje riziko úniku.
Navíc při práci s řetězci existuje riziko vytváření dalších kopií v poolu řetězců (string pool), což také prodlužuje dobu, po kterou je heslo v paměti.
// Příklad uložení hesla do `char[]` a jeho vymazání
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};
// Použití hesla (například pro autentizaci)
// ...
// Vymazání pole po použití
java.util.Arrays.fill(password, ' ');
// Nyní je heslo odstraněno z paměti