Sobes.tech
Middle

Por que o char[] é preferível ao String para armazenar a senha?

sobes.tech IA

Resposta da IA

Os objetos String são imutáveis. Isso significa que, uma vez criada uma string, seu conteúdo não pode ser alterado. Se guardar a senha numa String, ela permanecerá na memória até que o coletor de lixo remova esse objeto. Durante esse tempo, um atacante pode aceder à memória e ler a senha.

Os arrays char[] podem ser modificados. Após usar a senha guardada num char[], pode sobrescrever explicitamente os elementos do array, por exemplo, com caracteres nulos. Isto garante que a senha seja removida da memória assim que deixar de ser necessária, reduzindo significativamente o risco de fuga.

Além disso, ao trabalhar com strings, há o risco de criar cópias adicionais no pool de strings (string pool), o que também aumenta o tempo que a senha permanece na memória.

// Exemplo de armazenamento de senha em char[] e sua limpeza
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// Uso da senha (por exemplo, para autenticação)
// ...

// Limpeza do array após uso
java.util.Arrays.fill(password, ' ');

// Agora a senha foi removida da memória