Wann brauche ich einen SecureString in .NET?
Ich versuche, den Zweck von .NET SecureString zu verstehen. Von MSDN:
Eine Instanz der System.String-Klasse ist unveränderlich und kann, wenn sie nicht mehr benötigt wird, nicht programmgesteuert für die Garbage Collection eingeplant werden. Das heißt, die Instanz ist nach ihrer Erstellung schreibgeschützt und es ist nicht möglich, vorherzusagen, wann die Instanz aus dem Computerspeicher gelöscht wird. Wenn ein String-Objekt vertrauliche Informationen wie ein Passwort, eine Kreditkartennummer oder persönliche Daten enthält, besteht folglich die Gefahr, dass die Informationen nach ihrer Verwendung angezeigt werden, da Ihre Anwendung die Daten nicht aus dem Computerspeicher löschen kann.
Ein SecureString-Objekt ähnelt einem String-Objekt darin, dass es einen Textwert hat. Der Wert eines SecureString-Objekts wird jedoch automatisch verschlüsselt. Er kann geändert werden, bis Ihre Anwendung ihn als schreibgeschützt markiert. Er kann entweder von Ihrer Anwendung oder vom .NET Framework-Garbage Collector aus dem Computerspeicher gelöscht werden.
Der Wert einer Instanz von SecureString wird automatisch verschlüsselt, wenn die Instanz initialisiert oder der Wert geändert wird. Ihre Anwendung kann die Instanz unveränderlich machen und weitere Änderungen durch Aufrufen der MakeReadOnly-Methode verhindern.
Ist die automatische Verschlüsselung der große Gewinn?
Und warum kann ich nicht einfach sagen:
SecureString password = new SecureString("password");
anstatt
SecureString pass = new SecureString();
foreach (char c in "password".ToCharArray())
pass.AppendChar(c);
Welchen Aspekt von SecureString vermisse ich?