Dies sind alle Gründe, warum man für ein Passwort ein char [] Array anstelle von String wählen sollte .
1. Da Strings in Java unveränderlich sind, bleibt das Kennwort, wenn Sie es als einfachen Text speichern, im Speicher verfügbar, bis der Garbage Collector es löscht. Da String zur Wiederverwendbarkeit im String-Pool verwendet wird, besteht eine ziemlich hohe Wahrscheinlichkeit, dass dies der Fall ist bleiben lange im Gedächtnis, was eine Sicherheitsbedrohung darstellt.
Da jeder, der Zugriff auf den Speicherauszug hat, das Kennwort im Klartext finden kann, sollten Sie aus diesem Grund immer ein verschlüsseltes Kennwort anstelle von einfachem Text verwenden. Da Strings unveränderlich sind, kann der Inhalt von Strings auf keinen Fall geändert werden, da bei jeder Änderung ein neuer String erzeugt wird. Wenn Sie jedoch ein char [] verwenden, können Sie dennoch alle Elemente als leer oder null festlegen. Durch das Speichern eines Kennworts in einem Zeichenarray wird das Sicherheitsrisiko beim Diebstahl eines Kennworts deutlich verringert.
2. Java selbst empfiehlt die Verwendung der Methode getPassword () von JPasswordField, die ein char [] zurückgibt, anstelle der veralteten Methode getText (), die Kennwörter im Klartext unter Angabe von Sicherheitsgründen zurückgibt. Es ist gut, den Ratschlägen des Java-Teams zu folgen und sich an Standards zu halten, anstatt gegen diese zu verstoßen.
3. Bei String besteht immer das Risiko, dass einfacher Text in einer Protokolldatei oder Konsole gedruckt wird. Wenn Sie jedoch ein Array verwenden, wird der Inhalt eines Arrays nicht gedruckt, sondern der Speicherort wird gedruckt. Obwohl dies kein wirklicher Grund ist, macht es dennoch Sinn.
String strPassword="Unknown";
char[] charPassword= new char[]{'U','n','k','w','o','n'};
System.out.println("String password: " + strPassword);
System.out.println("Character password: " + charPassword);
String password: Unknown
Character password: [C@110b053
Referenziert von diesem Blog . Ich hoffe das hilft.