Sobes.tech
Middle

Kodėl char[] yra pageidautinas nei String slaptažodžio saugojimui?

sobes.tech AI

Atsakymas iš AI

String objektai yra nekintami. Tai reiškia, kad, sukūrus eilutę, jos turinys negali būti pakeistas. Jei saugote slaptažodį String, jis liks atmintyje tol, kol ši objekto nepašalins šiukšlių surinkėjas. Per šį laiką užpuolikas gali pasiekti atmintį ir perskaityti slaptažodį.

char[] masyvai yra modifikuojami. Po slaptažodžio, saugomo char[], naudojimo, galite aiškiai perrašyti masyvo elementus, pavyzdžiui, nulio simboliais. Tai užtikrina, kad slaptažodis bus pašalintas iš atminties nedelsiant, kai jis nebebus reikalingas, žymiai sumažindamas nutekėjimo riziką.

Be to, dirbant su eilutėmis, yra rizika sukurti papildomas kopijas eilutės baseine (string pool), kas taip pat prailgina slaptažodžio buvimo laiką atmintyje.

// Pavyzdys, kaip saugoti slaptažodį `char[]` ir jį išvalyti
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// Naudojimas slaptažodžio (pvz., autentifikacijai)
// ...

// Išvalyti masyvą po naudojimo
java.util.Arrays.fill(password, ' ');

// Dabar slaptažodis pašalintas iš atminties