SecureString SecureString SecureString SecureString Class

Définition

Représente le texte qui doit rester confidentiel, par exemple en le supprimant de la mémoire de l'ordinateur quand il n'est plus nécessaire.Represents text that should be kept confidential, such as by deleting it from computer memory when no longer needed. Cette classe ne peut pas être héritée.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
Héritage
SecureStringSecureStringSecureStringSecureString
Implémente

Exemples

L’exemple suivant montre comment utiliser un SecureString pour sécuriser un mot de passe utilisateur à utiliser comme informations d’identification pour démarrer un nouveau processus.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

Remarques

Important

Nous ne vous recommandons d’utiliser la SecureString classe pour tout nouveau développement.We don't recommend that you use the SecureString class for new development. Pour plus d’informations, consultez SecureString ne doit pas être utilisé sur GitHub.For more information, see SecureString shouldn't be used on GitHub.

SecureString est un type de chaîne qui fournit une mesure de sécurité.SecureString is a string type that provides a measure of security. Il essaie d’éviter de stocker des chaînes potentiellement sensibles dans la mémoire de processus en tant que texte brut.It tries to avoid storing potentially sensitive strings in process memory as plain text. (Pour connaître les limitations, toutefois, consultez le est-il sécurisé SecureString ? section.) La valeur d’une instance de SecureString sont automatiquement protégées à l’aide d’un mécanisme pris en charge par la plateforme sous-jacente lorsque l’instance est initialisée ou lorsque la valeur est modifiée.(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. Votre application peut rendre l’instance immuable et empêcher toute autre modification en appelant le MakeReadOnly (méthode).Your application can render the instance immutable and prevent further modification by invoking the MakeReadOnly method.

La longueur maximale d’un SecureString instance est 65 536 caractères.The maximum length of a SecureString instance is 65,536 characters.

Important

Ce type implémente le IDisposable interface.This type implements the IDisposable interface. Lorsque vous avez fini d’utiliser une instance du type, vous devez supprimer il directement ou indirectement.When you have finished using an instance of the type, you should dispose of it either directly or indirectly. Pour supprimer le type directement, appelez sa Dispose méthode dans un try / catch bloc.To dispose of the type directly, call its Dispose method in a try/catch block. Pour supprimer indirectement, utiliser une construction de langage tel que using (en c#) ou Using (en Visual Basic).To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Pour plus d’informations, consultez la section « À l’aide un objet qui implémente IDisposable » dans le IDisposable rubrique de l’interface.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

Le SecureString classe et ses membres ne sont pas visibles par COM.The SecureString class and its members are not visible to COM. Pour plus d'informations, consultez ComVisibleAttribute.For more information, see ComVisibleAttribute.

Dans cette section :In this section:

Chaîne de Visual Studio. SecureString String vs. SecureString
Opérations de SecureString SecureString operations
SecureString et interopérabilité SecureString and interop
SecureString est-il sécurisé ?How secure is SecureString?

Chaîne par rapport à SecureStringString versus SecureString

Une instance de la System.String classe est immuable et, lorsque vous n’en avez plus besoin, elle ne peut pas être planifiée par programme pour le garbage collection ; autrement dit, l’instance est en lecture seule après sa création, et il n’est pas possible de prédire quand l’instance sera supprimé de la mémoire de l’ordinateur.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. Étant donné que System.String instances sont immuables, les opérations qui semblent modifier une instance existante créent en fait une copie de celle-ci pour manipuler.Because System.String instances are immutable, operations that appear to modify an existing instance actually create a copy of it to manipulate. Par conséquent, si un String objet contient des informations sensibles telles qu’un mot de passe, numéro de carte de crédit ou les données personnelles, il existe un risque qu’elles soient révélées après leur utilisation car votre application ne peut pas supprimer les données à partir de la mémoire de l’ordinateur .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.

Un SecureString objet est similaire à un String car il a une valeur de texte de l’objet.A SecureString object is similar to a String object in that it has a text value. Toutefois, la valeur d’un SecureString de l’objet est épinglé en mémoire, peut utiliser un mécanisme de protection, telles que le chiffrement, fourni par le système d’exploitation sous-jacent, peut être modifié jusqu'à ce que votre application la marque comme étant en lecture seule et peuvent être supprimés de la mémoire de l’ordinateur soit par votre application qui appelle le Dispose (méthode) ou par le garbage collector de .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.

Pour une présentation des limites de la SecureString de classe, consultez le est-il sécurisé SecureString ? section.For a discussion of the limitations of the SecureString class, see the How secure is SecureString? section.

Retour au débutBack to top

Opérations de SecureStringSecureString operations

Le SecureString classe contient des membres qui vous permettent d’effectuer les opérations suivantes :The SecureString class includes members that allow you to do the following:

Instancier un SecureString objetInstantiate a SecureString object
Vous instanciez un SecureString objet en appelant son constructeur sans paramètre.You instantiate a SecureString object by calling its parameterless constructor.

Ajouter des caractères à un SecureString objetAdd characters to a SecureString object
Vous pouvez ajouter un caractère unique à la fois pour un SecureString objet en appelant son AppendChar ou InsertAt (méthode).You can add a single character at a time to a SecureString object by calling its AppendChar or InsertAt method.

Important

Un SecureString objet ne doit jamais être construit à partir d’un String, car les données sensibles sont déjà susceptibles d’être les conséquences de persistance de mémoire de la liste immuable String classe.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. La meilleure façon de construire un SecureString objet est d’une source non managée caractère à temps, telles que le Console.ReadKey (méthode).The best way to construct a SecureString object is from a character-at-a-time unmanaged source, such as the Console.ReadKey method.

Supprimer des caractères à partir d’un SecureString objetRemove characters from a SecureString object
Vous pouvez remplacer un caractère individuel en appelant le SetAt (méthode), supprimer un caractère individuel en appelant le RemoveAt (méthode), ou supprimez tous les caractères à partir de la SecureString instance en appelant le Clear (méthode).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.

Rendre le SecureString objet en lecture seuleMake the SecureString object read-only
Une fois que vous avez défini la chaîne qui le SecureString objet représente, vous appelez son MakeReadOnly méthode afin que la chaîne en lecture seule.Once you have defined the string that the SecureString object represents, you call its MakeReadOnly method to make the string read-only.

Obtenir des informations sur la SecureString objetGet information about the SecureString object
Le SecureString classe a uniquement deux membres qui fournissent des informations sur la chaîne : son Length propriété, qui indique le nombre d’unités de code UTF16 encodé dans la chaîne ; et le IsReadOnly, (méthode), ce qui indique si l’instance est en lecture seule.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.

Libérer la mémoire allouée à la SecureString instanceRelease the memory allocated to the SecureString instance
Étant donné que SecureString implémente le IDisposable interface, vous libérer sa mémoire en appelant le Dispose (méthode).Because SecureString implements the IDisposable interface, you release its memory by calling the Dispose method.

Le SecureString classe n’a aucuns membres inspectent, de comparer ou de convertissent la valeur d’un SecureString.The SecureString class has no members that inspect, compare, or convert the value of a SecureString. L’absence de membres de ce type permet de protéger la valeur de l’instance d’une exposition accidentelle ou malveillante.The absence of such members helps protect the value of the instance from accidental or malicious exposure. Utilisez les membres appropriés de la System.Runtime.InteropServices.Marshal classe, telle que la SecureStringToBSTR (méthode), pour manipuler la valeur d’un SecureString objet.Use appropriate members of the System.Runtime.InteropServices.Marshal class, such as the SecureStringToBSTR method, to manipulate the value of a SecureString object.

La bibliothèque de classes .NET Framework utilise couramment SecureString instances comme suit :The .NET Framework Class Library commonly uses SecureString instances in the following ways:

Retour au débutBack to top

SecureString et interopérabilitéSecureString and interop

Étant donné que le système d’exploitation ne prend pas en charge directement SecureString, vous devez convertir la valeur de la SecureString objet vers le type de chaîne requis avant de passer la chaîne à une méthode native.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. Le Marshal classe a cinq méthodes que cela :The Marshal class has five methods that do this:

Chacune de ces méthodes crée une chaîne de texte en clair dans la mémoire non managée.Each of these methods creates a clear-text string in unmanaged memory. Il incombe au développeur de zéro et libérer cette mémoire dès qu’il n’est plus nécessaire.It is the responsibility of the developer to zero out and free that memory as soon as it is no longer needed. Chacune des méthodes d’allocation de mémoire et de conversion chaîne a une méthode correspondante à zéro et libérer la mémoire allouée :Each of the string conversion and memory allocation methods has a corresponding method to zero out and free the allocated memory:

Méthode d’allocation et de conversionAllocation and conversion method Zéro et free, méthodeZero and free method
Marshal.SecureStringToBSTR Marshal.ZeroFreeBSTR
Marshal.SecureStringToCoTaskMemAnsi Marshal.ZeroFreeCoTaskMemAnsi
Marshal.SecureStringToCoTaskMemUnicode Marshal.ZeroFreeCoTaskMemUnicode
Marshal.SecureStringToGlobalAllocAnsi Marshal.ZeroFreeGlobalAllocAnsi
Marshal.SecureStringToCoTaskMemUnicode Marshal.ZeroFreeGlobalAllocUnicode

Retour au débutBack to top

SecureString est-il sécurisé ?How secure is SecureString?

Lors de la création correctement, un SecureString instance fournit plus de protection de données qu’un String.When created properly, a SecureString instance provides more data protection than a String. Lors de la création d’une chaîne à partir d’une source de caractère à temps String crée plusieurs intermédiaires dans la mémoire, tandis que SecureString crée une seule instance.When creating a string from a character-at-a-time source, String creates multiple intermediate in memory, whereas SecureString creates just a single instance. Le garbage collection de String objets n’est pas déterministe.Garbage collection of String objects is non-deterministic. En outre, étant donné que sa mémoire n’est pas épinglée, le garbage collector effectuent des copies supplémentaires de String valeurs lors du déplacement et le compactage de mémoire.In addition, because its memory is not pinned, the garbage collector will make additional copies of String values when moving and compacting memory. En revanche, la mémoire allouée à un SecureString objet est épinglé, et que la mémoire peut être libérée en appelant le Dispose (méthode).In contrast, the memory allocated to a SecureString object is pinned, and that memory can be freed by calling the Dispose method.

Bien que les données stockées dans un SecureString instance est plus sécurisée que les données stockées dans un String d’une instance, il existe des limitations importantes sur comment sécuriser un SecureString est de l’instance.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. Elles incluent notamment :These include:

PlateformePlatform
Sur le système d’exploitation Windows, le contenu d’un SecureString tableau de caractères interne de l’instance sont chiffrés.On the Windows operating system, the contents of a SecureString instance's internal character array are encrypted. Toutefois, si en raison du manque API ou des problèmes de gestion de clés, le chiffrement n’est pas disponible sur toutes les plateformes.However, whether because of missing APIs or key management issues, encryption is not available on all platforms. En raison de cette dépendance de plateforme, SecureString ne chiffre pas le stockage interne sur la plateforme de non Windows.Because of this platform dependency, SecureString does not encrypt the internal storage on non-Windows platform. Autres techniques permettent de fournir une protection supplémentaire sur ces plateformes.Other techniques are used on those platforms to provide additional protection.

DurationDuration
Même si le SecureString implémentation est en mesure de tirer parti du chiffrement, le texte brut est attribué à la SecureString instance peut-être être exposée à des moments différents :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:

  • Étant donné que Windows n’offre pas une implémentation de la chaîne sécurisée au niveau du système d’exploitation, le .NET Framework a toujours convertir la valeur de chaîne sécurisée en sa représentation sous forme de texte brut pour pouvoir le pour utiliser.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.

  • Chaque fois que la valeur de la chaîne sécurisée est modifiée par les méthodes telles que AppendChar ou RemoveAt, elle doit être déchiffrée (qui est, converti en texte brut), modifié et puis chiffrées à nouveau.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.

  • Si la chaîne sécurisée est utilisée dans un appel interop, elle doit être convertie en une chaîne ANSI, une chaîne Unicode ou une chaîne binaire (BSTR).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). Pour plus d’informations, consultez le SecureString et interopérabilité section.For more information, see the SecureString and interop section.

L’intervalle de temps pendant lequel le SecureString valeur de l’instance est exposée est simplement réduit par rapport à la String classe.The time interval for which the SecureString instance's value is exposed is merely shortened in comparison to the String class.

Stockage et l’utilisationStorage versus usage
En règle générale, la SecureString classe définit un mécanisme de stockage pour les valeurs de chaîne qui doit être protégé ou gardée confidentielle.More generally, the SecureString class defines a storage mechanism for string values that should be protected or kept confidential. Toutefois, en dehors du .NET Framework proprement dit, aucun mécanisme d’utilisation prend en charge SecureString.However, outside of the .NET Framework itself, no usage mechanism supports SecureString. Cela signifie que la chaîne sécurisée doit être convertie en un formulaire utilisable (généralement une forme de texte clair) qui peut être reconnu par sa cible, et que le déchiffrement et la conversion doivent se produire dans l’espace utilisateur.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.

Globale, SecureString est plus sécurisé que String , car elle limite l’exposition des données de chaîne sensible.Overall, SecureString is more secure than String because it limits the exposure of sensitive string data. Cependant, ces chaînes peuvent toujours être exposées à n’importe quel processus ou une opération qui a accès à la mémoire brute, comme un processus malveillant en cours d’exécution sur l’ordinateur hôte, un vidage de processus ou un fichier d’échange visibles pour l’utilisateur.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. Au lieu d’utiliser SecureString pour protéger les mots de passe, l’alternative recommandée consiste à utiliser un handle opaque aux informations d’identification sont stockées en dehors du processus.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.

Retour au débutBack to top

Constructeurs

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

Initialise une nouvelle instance de la classe SecureString.Initializes a new instance of the SecureString class.

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

Initialise une nouvelle instance de la classe SecureString à partir d'un sous-tableau d'objets Char.Initializes a new instance of the SecureString class from a subarray of Char objects.

Ce constructeur n’est pas conforme CLS.This constructor is not CLS-compliant. L’alternative conforme CLS est SecureString().The CLS-compliant alternative is SecureString().

Propriétés

Length Length Length Length

Obtient le nombre de caractères dans la chaîne sécurisée actuelle.Gets the number of characters in the current secure string.

Méthodes

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

Ajoute un caractère à la fin de la chaîne sécurisée actuelle.Appends a character to the end of the current secure string.

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

Supprime la valeur de la chaîne sécurisée actuelle.Deletes the value of the current secure string.

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

Crée une copie de la chaîne sécurisée actuelle.Creates a copy of the current secure string.

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

Libère toutes les ressources utilisées par l’objet SecureString actuel.Releases all resources used by the current SecureString object.

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

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

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

Fait office de fonction de hachage par défaut.Serves as the default hash function.

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

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

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

Insère un caractère dans cette chaîne sécurisée à la position d'index spécifiée.Inserts a character in this secure string at the specified index position.

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

Indique si cette chaîne sécurisée est en lecture seule.Indicates whether this secure string is marked read-only.

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

Met en lecture seule la valeur texte de cette chaîne sécurisée.Makes the text value of this secure string read-only.

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

Crée une copie superficielle du Object actuel.Creates a shallow copy of the current Object.

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

Supprime de cette chaîne sécurisée le caractère situé à la position d'index spécifiée.Removes the character at the specified index position from this secure string.

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

Remplace le caractère existant à la position d'index spécifiée par un autre caractère.Replaces the existing character at the specified index position with another character.

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

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Inherited from Object)

S’applique à

Voir aussi