Perché char[] è preferibile a String per memorizzare una password?
sobes.tech AI
Risposta dell'AI
Gli oggetti String sono immutabili. Ciò significa che, una volta creata una stringa, il suo contenuto non può essere modificato. Se si memorizza la password in un String, questa rimarrà in memoria finché il garbage collector non eliminerà l'oggetto. Durante questo periodo, un attaccante potrebbe accedere alla memoria e leggere la password.
Gli array char[] sono modificabili. Dopo aver usato la password memorizzata in un char[], è possibile sovrascrivere esplicitamente gli elementi dell'array, ad esempio con caratteri nulli. Questo garantisce che la password venga rimossa dalla memoria non appena non è più necessaria, riducendo significativamente il rischio di fuga.
Inoltre, lavorando con le stringhe, si rischia di creare copie aggiuntive nel pool di stringhe (string pool), il che aumenta anche il tempo di permanenza della password in memoria.
// Esempio di memorizzazione della password in un char[] e sua pulizia
char[] password = {'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};
// Uso della password (ad esempio, per l'autenticazione)
// ...
// Pulizia dell'array dopo l'uso
java.util.Arrays.fill(password, ' ');
// Ora la password è stata rimossa dalla memoria