Sobes.tech
Middle

Pourquoi char[] est-il préféré à String pour stocker un mot de passe?

sobes.tech IA

Réponse de l'IA

Les objets String sont immuables. Cela signifie qu'une fois qu'une chaîne est créée, son contenu ne peut pas être modifié. Si vous stockez le mot de passe dans un String, il restera en mémoire jusqu'à ce que le ramasse-miettes supprime cet objet. Pendant ce temps, un attaquant pourrait accéder à la mémoire et lire le mot de passe.

Les tableaux char[] sont modifiables. Après avoir utilisé le mot de passe stocké dans un char[], vous pouvez explicitement écraser les éléments du tableau, par exemple avec des caractères nuls. Cela garantit que le mot de passe est supprimé de la mémoire dès qu'il n'est plus nécessaire, réduisant ainsi considérablement le risque de fuite.

De plus, en travaillant avec des chaînes, il y a un risque de créer des copies supplémentaires dans le pool de chaînes (string pool), ce qui augmente également la durée de conservation du mot de passe en mémoire.

// Exemple de stockage du mot de passe dans un char[] et de son nettoyage
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};

// Utilisation du mot de passe (par exemple, pour l'authentification)
// ...

// Nettoyage du tableau après utilisation
java.util.Arrays.fill(password, ' ');

// Le mot de passe est maintenant supprimé de la mémoire