Sobes.tech
Middle

Waarom is char[] beter dan String voor het opslaan van een wachtwoord?

sobes.tech AI

Antwoord van AI

Objecten van het type String zijn onveranderlijk. Dit betekent dat, zodra een string is gemaakt, de inhoud niet kan worden gewijzigd. Als je het wachtwoord opslaat in een String, blijft deze in het geheugen totdat de garbage collector dit object verwijdert. In die tijd kan een aanvaller toegang krijgen tot het geheugen en het wachtwoord lezen.

Arrays van het type char[] kunnen worden gewijzigd. Na gebruik van het wachtwoord opgeslagen in een char[], kun je expliciet de elementen van de array overschrijven, bijvoorbeeld met null-tekens. Dit zorgt ervoor dat het wachtwoord wordt verwijderd uit het geheugen zodra het niet meer nodig is, wat het risico op lekken aanzienlijk vermindert.

Bovendien bestaat er bij werken met strings het risico op het maken van extra kopieën in de string pool, wat ook de tijd dat het wachtwoord in het geheugen blijft, verlengt.

// Voorbeeld van het opslaan van een wachtwoord in een char[] en het wissen ervan
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// Gebruik van het wachtwoord (bijvoorbeeld voor authenticatie)
// ...

// Het wissen van de array na gebruik
java.util.Arrays.fill(password, ' ');

// Nu is het wachtwoord uit het geheugen verwijderd