SecureString SecureString SecureString SecureString Class

Definition

Stellt Text dar, der vertraulich behandelt werden soll, etwa durch Löschen aus dem Arbeitsspeicher des Computers, wenn er nicht mehr benötigt wird.Represents text that should be kept confidential, such as by deleting it from computer memory when no longer needed. Diese Klasse kann nicht vererbt werden.This class cannot be inherited.

public ref class SecureString sealed : IDisposable
public sealed class SecureString : IDisposable
type SecureString = class
    interface IDisposable
Public NotInheritable Class SecureString
Implements IDisposable
Vererbung
SecureStringSecureStringSecureStringSecureString
Implementiert

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie eine SecureString sichern Sie das Kennwort eines Benutzers für die Verwendung als einen Satz Anmeldeinformationen für einen neuen Prozess zu starten.The following example demonstrates how to use a SecureString to secure a user's password for use as a credential to start a new process.

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Security;

public class Example
{
    public static void Main()
    {
        // Instantiate the secure string.
        SecureString securePwd = new SecureString();
        ConsoleKeyInfo key;

        Console.Write("Enter password: ");
        do {
           key = Console.ReadKey(true);
           
           // Ignore any key out of range.
           if (((int) key.Key) >= 65 && ((int) key.Key <= 90)) {
              // Append the character to the password.
              securePwd.AppendChar(key.KeyChar);
              Console.Write("*");
           }   
        // Exit if Enter key is pressed.
        } while (key.Key != ConsoleKey.Enter);
        Console.WriteLine();
        
        try {
            Process.Start("Notepad.exe", "MyUser", securePwd, "MYDOMAIN");
        }
        catch (Win32Exception e) {
            Console.WriteLine(e.Message);
        }
        finally {
           securePwd.Dispose();
        }
    }
}
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Security

Public Class Example
    Public Shared Sub Main()
        ' Instantiate the secure string.
        Dim securePwd As New SecureString()
        Dim key As ConsoleKeyInfo
        
        Console.Write("Enter password: ")
        Do
           key = Console.ReadKey(True)

           ' Ignore any key out of range
           If CInt(key.Key) >= 65 And CInt(key.Key <= 90) Then    
              ' Append the character to the password.
              securePwd.AppendChar(key.KeyChar)
              Console.Write("*")
           End If                                    
        ' Exit if Enter key is pressed.
        Loop While key.Key <> ConsoleKey.Enter
        Console.WriteLine()
        
        Try
            Process.Start("Notepad.exe", "MyUser", securePwd, "MYDOMAIN")
        Catch e As Win32Exception
            Console.WriteLine(e.Message)
        Finally
           securePwd.Dispose()
        End Try
    End Sub
End Class

Hinweise

Wichtig

Es wird nicht empfohlen, dass Sie verwenden die SecureString Klasse für die neue Entwicklung.We don't recommend that you use the SecureString class for new development. Weitere Informationen finden Sie unter SecureString sollte nicht verwendet werden, auf GitHub.For more information, see SecureString shouldn't be used on GitHub.

SecureString ist eine Art von Zeichenfolge, die ein Maß an Sicherheit bietet.SecureString is a string type that provides a measure of security. Wird versucht, Sie sollten nicht sicherheitsrelevante Zeichenfolgen im Arbeitsspeicher als nur-Text gespeichert werden.It tries to avoid storing potentially sensitive strings in process memory as plain text. (Informationen zu Einschränkungen finden Sie jedoch unter der wie sicher SecureString ist? Abschnitt.) Der Wert einer Instanz von SecureString wird automatisch geschützt, mit einem Mechanismus, der von der zugrunde liegenden Plattform unterstützt werden, wenn die Instanz initialisiert wird, oder wenn der Wert geändert wird.(For limitations, however, see the How secure is SecureString? section.) The value of an instance of SecureString is automatically protected using a mechanism supported by the underlying platform when the instance is initialized or when the value is modified. Ihre Anwendung die Instanz unveränderlich zu rendern und zu verhindern, dass weitere Änderungen durch den Aufruf der MakeReadOnly Methode.Your application can render the instance immutable and prevent further modification by invoking the MakeReadOnly method.

Die maximale Länge von einem SecureString Instanz beträgt 65.536 Zeichen.The maximum length of a SecureString instance is 65,536 characters.

Wichtig

Dieser Typ implementiert die IDisposable-Schnittstelle.This type implements the IDisposable interface. Wenn Sie mit einer Instanz des Typs haben, sollten Sie es entweder direkt oder indirekt freigeben.When you have finished using an instance of the type, you should dispose of it either directly or indirectly. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf.To dispose of the type directly, call its Dispose method in a try/catch block. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Die SecureString Klasse und ihre Member sind nicht für COM sichtbar.The SecureString class and its members are not visible to COM. Weitere Informationen finden Sie unter ComVisibleAttribute.For more information, see ComVisibleAttribute.

In diesem AbschnittIn this section:

Visual Studio eine Zeichenfolge. SecureString String vs. SecureString
SecureString-Vorgänge SecureString operations
"SecureString" und Interoperabilität SecureString and interop
Wie sicher SecureString ist?How secure is SecureString?

Zeichenfolge, die im Vergleich zu SecureStringString versus SecureString

Eine Instanz von der System.String Klasse ist unveränderlich und kann, wenn nicht mehr benötigt wird, nicht programmgesteuert für die Garbagecollection geplant werden, d. h., die Instanz schreibgeschützt ist, nachdem es erstellt, und es nicht möglich ist, um vorherzusagen, wann die Instanz stehen aus dem Computerspeicher gelöscht.An instance of the System.String class is both immutable and, when no longer needed, cannot be programmatically scheduled for garbage collection; that is, the instance is read-only after it is created, and it is not possible to predict when the instance will be deleted from computer memory. Da System.String -Instanzen sind unveränderlich, Vorgänge, die angezeigt werden, so ändern Sie eine vorhandene Instanz erstellen eine Kopie der Datei zu bearbeiten.Because System.String instances are immutable, operations that appear to modify an existing instance actually create a copy of it to manipulate. Daher, wenn eine String -Objekt sicherheitsrelevante Informationen wie z. B. Kennwörter, Kreditkartennummern oder persönliche Daten enthält, besteht das Risiko konnte die Informationen eingeblendet werden, nachdem er verwendet wird, da die Anwendung die Daten aus dem Computerspeicher löschen kann nicht .Consequently, if a String object contains sensitive information such as a password, credit card number, or personal data, there is a risk the information could be revealed after it is used because your application cannot delete the data from computer memory.

Ein SecureString -Objekt ähnelt einem String Objekt, dass es sich um einen Textwert besitzt.A SecureString object is similar to a String object in that it has a text value. Allerdings den Wert des einem SecureString Objekt im Arbeitsspeicher fixiert ist, kann einen Schutzmechanismus verwenden, wie z. B., durch das zugrunde liegende Betriebssystem bereitgestellter Verschlüsselung auf geändert werden kann, bis der Anwendung als schreibgeschützt markiert und aus dem Computerspeicher gelöscht werden kann entweder durch Aufruf von Ihrer Anwendung die Dispose Methode oder durch den Garbage Collector von .NET Framework.However, the value of a SecureString object is pinned in memory, may use a protection mechanism, such as encryption, provided by the underlying operating system, can be modified until your application marks it as read-only, and can be deleted from computer memory either by your application calling the Dispose method or by the .NET Framework garbage collector.

Eine Erläuterung der Einschränkungen von der SecureString Klasse, finden Sie unter den wie sicher SecureString ist? Abschnitt.For a discussion of the limitations of the SecureString class, see the How secure is SecureString? section.

Zurück nach obenBack to top

SecureString-VorgängeSecureString operations

Die SecureString Klasse enthält Elemente, mit denen Sie die folgenden Schritte ausführen:The SecureString class includes members that allow you to do the following:

Instanziieren einer SecureString ObjektInstantiate a SecureString object
Instanziieren Sie ein SecureString -Objekt durch Aufrufen der parameterlose Konstruktor.You instantiate a SecureString object by calling its parameterless constructor.

Hinzufügen von Zeichen in einem SecureString ObjektAdd characters to a SecureString object
Sie können ein einzelnes Zeichen zu einem Zeitpunkt zum Hinzufügen einer SecureString -Objekt durch Aufrufen der AppendChar oder InsertAt Methode.You can add a single character at a time to a SecureString object by calling its AppendChar or InsertAt method.

Wichtig

Ein SecureString Objekt sollte nie konstruiert werden, von einem String, da die sensiblen Daten bereits unterliegen die Arbeitsspeicher-Persistenz folgen die unveränderliche String Klasse.A SecureString object should never be constructed from a String, because the sensitive data is already subject to the memory persistence consequences of the immutable String class. Die beste Möglichkeit zum Erstellen einer SecureString Objekt wird von einer nicht verwalteten Zeichen-at-a-Time-Quelle, z. B. die Console.ReadKey Methode.The best way to construct a SecureString object is from a character-at-a-time unmanaged source, such as the Console.ReadKey method.

Entfernen von Zeichen aus einer SecureString ObjektRemove characters from a SecureString object
Sie können ein einzelnes Zeichen ersetzen, durch den Aufruf der SetAt -Methode, entfernen Sie ein einzelnes Zeichen durch Aufrufen der RemoveAt -Methode, oder entfernen Sie alle Zeichen aus der SecureString -Instanz durch Aufrufen der Clear Methode.You can replace an individual character by calling the SetAt method, remove an individual character by calling the RemoveAt method, or remove all characters from the SecureString instance by calling the Clear method.

Stellen Sie die SecureString Objekt schreibgeschütztMake the SecureString object read-only
Nachdem Sie die Zeichenfolge definiert haben, die SecureString Objekt darstellt, die Sie aufrufen, die MakeReadOnly Methode, um die Zeichenfolge "schreibgeschützt" festzulegen.Once you have defined the string that the SecureString object represents, you call its MakeReadOnly method to make the string read-only.

Abrufen von Informationen über die SecureString ObjektGet information about the SecureString object
Die SecureString -Klasse verfügt über nur zwei Mitglieder, die Informationen über die Zeichenfolge enthalten: die Length -Eigenschaft, die die Anzahl der UTF16-codierte Codeeinheiten in der Zeichenfolge angibt und die IsReadOnly, Methode, die angibt, ob die Instanz schreibgeschützt.The SecureString class has only two members that provide information about the string: its Length property, which indicates the number of UTF16-encoded code units in the string; and the IsReadOnly, method, which indicates whether the instance is read-only.

Die Speichermenge für die Version der SecureString InstanzRelease the memory allocated to the SecureString instance
Da SecureString implementiert die IDisposable -Schnittstelle, Sie ihren Arbeitsspeicher freigeben, indem er die Dispose Methode.Because SecureString implements the IDisposable interface, you release its memory by calling the Dispose method.

Die SecureString -Klasse verfügt über keine Member, die überprüfen, vergleichen oder Konvertieren des Werts einer SecureString.The SecureString class has no members that inspect, compare, or convert the value of a SecureString. Das fehlen solcher Member kann den Wert der Instanz vor versehentlicher oder böswilliger Verfügbarmachung zu schützen.The absence of such members helps protect the value of the instance from accidental or malicious exposure. Verwenden Sie geeignete Member, der die System.Runtime.InteropServices.Marshal Klasse, z. B. die SecureStringToBSTR Methode, um den Wert des zu bearbeiten eine SecureString Objekt.Use appropriate members of the System.Runtime.InteropServices.Marshal class, such as the SecureStringToBSTR method, to manipulate the value of a SecureString object.

Der .NET Framework-Klassenbibliothek verwendet SecureString Instanzen gibt folgende Möglichkeiten:The .NET Framework Class Library commonly uses SecureString instances in the following ways:

Zurück nach obenBack to top

"SecureString" und InteroperabilitätSecureString and interop

Da das Betriebssystem nicht direkt unterstützt SecureString, müssen Sie den Wert der konvertieren die SecureString Objekt in den erforderlichen String-Datentyp, bevor Sie die Zeichenfolge an einer nativen Methode übergeben.Because the operating system does not directly support SecureString, you must convert the value of the SecureString object to the required string type before passing the string to a native method. Die Marshal -Klasse verfügt über fünf Methoden, die dazu:The Marshal class has five methods that do this:

Jede dieser Methoden erstellt eine Klartext-Zeichenfolge im nicht verwalteten Speicher.Each of these methods creates a clear-text string in unmanaged memory. Es ist die Verantwortung des Entwicklers mit Nullen gefüllt und freigegeben werden, sobald es nicht mehr benötigt wird.It is the responsibility of the developer to zero out and free that memory as soon as it is no longer needed. Jede Zeichenfolgenmethoden für die Konvertierung und Arbeitsspeicher-Zuordnung verfügt über eine entsprechende Methode mit Nullen gefüllt und den zugeordneten Speicher freigeben:Each of the string conversion and memory allocation methods has a corresponding method to zero out and free the allocated memory:

Zuordnung und Konvertierung-MethodeAllocation and conversion method 0 (null) und free-MethodeZero and free method
Marshal.SecureStringToBSTR Marshal.ZeroFreeBSTR
Marshal.SecureStringToCoTaskMemAnsi Marshal.ZeroFreeCoTaskMemAnsi
Marshal.SecureStringToCoTaskMemUnicode Marshal.ZeroFreeCoTaskMemUnicode
Marshal.SecureStringToGlobalAllocAnsi Marshal.ZeroFreeGlobalAllocAnsi
Marshal.SecureStringToCoTaskMemUnicode Marshal.ZeroFreeGlobalAllocUnicode

Zurück nach obenBack to top

Wie sicher SecureString ist?How secure is SecureString?

Wenn ordnungsgemäß erstellt eine SecureString Instanz bietet mehr Datenschutz als eine String.When created properly, a SecureString instance provides more data protection than a String. Beim Erstellen einer Zeichenfolge aus einer Quelle Zeichen-at-a-Time String mehrere fortgeschrittene im Arbeitsspeicher erstellt, während SecureString erstellt nur eine einzelne Instanz.When creating a string from a character-at-a-time source, String creates multiple intermediate in memory, whereas SecureString creates just a single instance. Garbagecollection String Objekte ist nicht deterministisch.Garbage collection of String objects is non-deterministic. Da der Arbeitsspeicher nicht verknüpft ist, der Garbage Collector wird Stellen Sie außerdem zusätzliche Kopien String Werten, wenn das Verschieben und Komprimieren von Arbeitsspeicher.In addition, because its memory is not pinned, the garbage collector will make additional copies of String values when moving and compacting memory. Im Gegensatz dazu Arbeitsspeicher zugewiesen eine SecureString Objekt fixiert ist, und, dass der Arbeitsspeicher freigegeben werden kann, durch den Aufruf der Dispose Methode.In contrast, the memory allocated to a SecureString object is pinned, and that memory can be freed by calling the Dispose method.

Obwohl die Speicherung von Daten in eine SecureString Instanz ist sicherer als die Daten in eine String Instanz ist, bestehen erhebliche Einschränkungen für wie sicher ein SecureString Instanz ist.Although data stored in a SecureString instance is more secure than data stored in a String instance, there are significant limitations on how secure a SecureString instance is. Dazu gehören:These include:

PlattformPlatform
Auf dem Windows-Betriebssystem, den Inhalt des eine SecureString interne Zeichenarray Instanz verschlüsselt sind.On the Windows operating system, the contents of a SecureString instance's internal character array are encrypted. Allerdings ist Verschlüsselung aufgrund fehlender-APIs oder wichtige Probleme, nicht auf allen Plattformen verfügbar.However, whether because of missing APIs or key management issues, encryption is not available on all platforms. Aufgrund dieser plattformabhängigkeit SecureString verschlüsselt nicht den internen Speicher für nicht-Windows-Plattform.Because of this platform dependency, SecureString does not encrypt the internal storage on non-Windows platform. Andere Verfahren werden auf diesen Plattformen verwendet, um zusätzlichen Schutz zu bieten.Other techniques are used on those platforms to provide additional protection.

DauerDuration
Selbst wenn der SecureString Implementierung der Verschlüsselung nutzen können, den nur-Text zugewiesen wird, um die SecureString Instanz kann zu verschiedenen Zeiten verfügbar gemacht werden:Even if the SecureString implementation is able to take advantage of encryption, the plain text assigned to the SecureString instance may be exposed at various times:

  • Da Windows auf der Betriebssystemebene eine sichere Zeichenfolge-Implementierung bietet keine, muss .NET Framework immer noch den Wert für die sichere Zeichenfolge in die nur-Text-Darstellung zu konvertieren, um sie zu verwenden.Because Windows doesn't offer a secure string implementation at the operating system level, the .NET Framework still has to convert the secure string value to its plain text representation in order to use it.

  • Jedes Mal, wenn der Wert der sicheren Zeichenfolge geändert wird, indem Methoden wie z. B. AppendChar oder RemoveAt, es muss entschlüsselt werden (die wieder in nur-Text konvertiert wird,), geändert, und klicken Sie dann erneut verschlüsselt.Whenever the value of the secure string is modified by methods such as AppendChar or RemoveAt, it must be decrypted (that is, converted back to plain text), modified, and then encrypted again.

  • Wenn die sichere Zeichenfolge in eine Interop-Aufruf verwendet wird, müssen sie eine ANSI-Zeichenfolge, eine Unicode-Zeichenfolge oder eine binäre Zeichenfolge (BSTR) konvertiert werden.If the secure string is used in an interop call, it must be converted to an ANSI string, a Unicode string, or a binary string (BSTR). Weitere Informationen finden Sie unter den SecureString und Interop- Abschnitt.For more information, see the SecureString and interop section.

Das Zeitintervall für die die SecureString des instanzwerts wird verfügbar gemacht wird lediglich im Vergleich zur verkürzt die String Klasse.The time interval for which the SecureString instance's value is exposed is merely shortened in comparison to the String class.

Speicher im Vergleich zur NutzungStorage versus usage
Allgemeiner ausgedrückt, die SecureString -Klasse definiert einen Speichermechanismus für Zeichenfolgenwerte, die geschützt oder vertraulich werden soll.More generally, the SecureString class defines a storage mechanism for string values that should be protected or kept confidential. Außerhalb von .NET Framework selbst unterstützt keinen Mechanismus für die Auslastung jedoch SecureString.However, outside of the .NET Framework itself, no usage mechanism supports SecureString. Dies bedeutet, dass die sichere Zeichenfolge in eine verwendbare Form (in der Regel ein Klartext-Formular) konvertiert werden muss, die vom Ziel erkannt werden können und im Benutzerbereich Entschlüsselung und die Konvertierung erfolgen müssen.This means that the secure string must be converted to a usable form (typically a clear text form) that can be recognized by its target, and that decryption and conversion must occur in user space.

Insgesamt SecureString ist sicherer als String , da er die Offenlegung von sensiblen Zeichenfolgendaten begrenzt.Overall, SecureString is more secure than String because it limits the exposure of sensitive string data. Allerdings können diese Zeichenfolgen weiterhin verfügbar gemacht werden, zu jedem Prozess oder einen Vorgang, die Zugriff auf den unformatierten Speicher, z. B. einem schädlichen Prozess ausgeführt wird, auf dem Hostcomputer, ein Speicherabbild oder eine Auslagerungsdatei für Benutzer angezeigt werden kann.However, those strings may still be exposed to any process or operation that has access to raw memory, such as a malicious process running on the host computer, a process dump, or a user-viewable swap file. Anstelle von SecureString um Kennwörter zu schützen, der die empfohlene Alternative ist ein nicht transparentes Handle, um Anmeldeinformationen zu verwenden, die außerhalb des Prozesses gespeichert sind.Instead of using SecureString to protect passwords, the recommended alternative is to use an opaque handle to credentials that are stored outside of the process.

Zurück nach obenBack to top

Konstruktoren

SecureString() SecureString() SecureString() SecureString()

Initialisiert eine neue Instanz der SecureString-Klasse.Initializes a new instance of the SecureString class.

SecureString(Char*, Int32) SecureString(Char*, Int32) SecureString(Char*, Int32) SecureString(Char*, Int32)

Initialisiert eine neue Instanz der SecureString-Klasse aus einem Unterarray von Char-Objekten.Initializes a new instance of the SecureString class from a subarray of Char objects.

Dieser Konstruktor ist nicht CLS-kompatibel.This constructor is not CLS-compliant. Die CLS-kompatible Alternative ist SecureString().The CLS-compliant alternative is SecureString().

Eigenschaften

Length Length Length Length

Ruft die Anzahl der Zeichen in der aktuellen sicheren Zeichenfolge ab.Gets the number of characters in the current secure string.

Methoden

AppendChar(Char) AppendChar(Char) AppendChar(Char) AppendChar(Char)

Fügt am Ende der aktuellen sicheren Zeichenfolge ein Zeichen an.Appends a character to the end of the current secure string.

Clear() Clear() Clear() Clear()

Löscht den Wert der aktuellen sicheren Zeichenfolge.Deletes the value of the current secure string.

Copy() Copy() Copy() Copy()

Erstellt eine Kopie der aktuellen sicheren Zeichenfolge.Creates a copy of the current secure string.

Dispose() Dispose() Dispose() Dispose()

Gibt alle vom aktuellen SecureString-Objekt verwendeten Ressourcen frei.Releases all resources used by the current SecureString object.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
InsertAt(Int32, Char) InsertAt(Int32, Char) InsertAt(Int32, Char) InsertAt(Int32, Char)

Fügt in dieser sicheren Zeichenfolge an der angegebenen Indexposition ein Zeichen ein.Inserts a character in this secure string at the specified index position.

IsReadOnly() IsReadOnly() IsReadOnly() IsReadOnly()

Gibt an, ob diese sichere Zeichenfolge als schreibgeschützt markiert ist.Indicates whether this secure string is marked read-only.

MakeReadOnly() MakeReadOnly() MakeReadOnly() MakeReadOnly()

Legt den Textwert dieser sicheren Zeichenfolge als schreibgeschützt fest.Makes the text value of this secure string read-only.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
RemoveAt(Int32) RemoveAt(Int32) RemoveAt(Int32) RemoveAt(Int32)

Entfernt das Zeichen an der angegebenen Indexposition aus dieser sicheren Zeichenfolge.Removes the character at the specified index position from this secure string.

SetAt(Int32, Char) SetAt(Int32, Char) SetAt(Int32, Char) SetAt(Int32, Char)

Ersetzt das an der angegebenen Indexposition vorhandene Zeichen durch ein anderes Zeichen.Replaces the existing character at the specified index position with another character.

ToString() ToString() ToString() ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Gilt für:

Siehe auch