Sobes.tech
Middle

Защо char[] е по-преференциален от String за съхранение на парола?

sobes.tech AI

Отговор от AI

Обектите от тип String са неизменяеми. Това означава, че след създаването на низ, съдържанието му не може да бъде променено. Ако запазите паролата в String, тя ще остане в паметта, докато събирачът на боклука не я премахне. През това време, нападател може да получи достъп до паметта и да прочете паролата.

Масивите char[] могат да бъдат променяни. След използване на паролата, съхранявана в char[], можете явно да презапишете елементите на масива, например с нулеви символи. Това гарантира, че паролата ще бъде премахната от паметта веднага след като вече не е необходима, значително намалявайки риска от изтичане.

Освен това, при работа със низове съществува риск от създаване на допълнителни копия в пулa на низовете (string pool), което също увеличава времето, през което паролата остава в паметта.

// Пример за съхранение на парола в char[] и нейното почистване
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// Използване на паролата (например, за удостоверяване)
// ...

// Почистване на масива след използване
java.util.Arrays.fill(password, ' ');

// Сега паролата е премахната от паметта