Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

SecureString classe

 

Date de publication : novembre 2016

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. Cette classe ne peut pas être héritée.

Espace de noms:   System.Security
Assembly:  mscorlib (dans mscorlib.dll)

System.Object
  System.Security.SecureString

public sealed class SecureString : IDisposable

NomDescription
System_CAPS_pubmethodSecureString()

Initialise une nouvelle instance de la classe SecureString.

System_CAPS_pubmethodSecureString(Char*, Int32)

Cette API prend en charge l’infrastructure de produit et n’est pas destinée à être utilisée directement depuis votre code. Initialise une nouvelle instance de la classe SecureString à partir d'un sous-tableau d'objets System.Char.

Ce constructeur n’est pas conforme CLS. L’alternative conforme CLS est SecureString.SecureString().

NomDescription
System_CAPS_pubpropertyLength

Obtient le nombre de caractères dans la chaîne sécurisée actuelle.

NomDescription
System_CAPS_pubmethodAppendChar(Char)

Ajoute un caractère à la fin de la chaîne sécurisée actuelle.

System_CAPS_pubmethodClear()

Supprime la valeur de la chaîne sécurisée actuelle.

System_CAPS_pubmethodCopy()

Crée une copie de la chaîne sécurisée actuelle.

System_CAPS_pubmethodDispose()

Libère toutes les ressources utilisées par l'objet SecureString actuel.

System_CAPS_pubmethodEquals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.(Hérité de Object.)

System_CAPS_pubmethodGetHashCode()

Fait office de fonction de hachage par défaut.(Hérité de Object.)

System_CAPS_pubmethodGetType()

Obtient le Type de l'instance actuelle.(Hérité de Object.)

System_CAPS_pubmethodInsertAt(Int32, Char)

Insère un caractère dans cette chaîne sécurisée à la position d'index spécifiée.

System_CAPS_pubmethodIsReadOnly()

Indique si cette chaîne sécurisée est en lecture seule.

System_CAPS_pubmethodMakeReadOnly()

Met en lecture seule la valeur texte de cette chaîne sécurisée.

System_CAPS_pubmethodRemoveAt(Int32)

Supprime de cette chaîne sécurisée le caractère situé à la position d'index spécifiée.

System_CAPS_pubmethodSetAt(Int32, Char)

Remplace le caractère existant à la position d'index spécifiée par un autre caractère.

System_CAPS_pubmethodToString()

Retourne une chaîne qui représente l'objet actuel.(Hérité de Object.)

SecureStringest un type de chaîne qui fournit une mesure de sécurité. Il tente d’éviter de stocker des chaînes potentiellement sensibles dans la mémoire de processus en tant que texte brut. (Pour connaître les limitations, toutefois, consultez la SecureString d’est-il sécurisé ? section.) La valeur d’une instance de SecureString est alors automatiquement protégé à l’aide d’un mécanisme de prise en charge par la plateforme sous-jacente lorsque l’instance est initialisée ou lorsque la valeur est modifiée. Votre application peut rendre l’instance immuable et empêcher toute autre modification en appelant le MakeReadOnly (méthode).

La longueur maximale d’un SecureString instance est 65 536 caractères.

System_CAPS_importantImportant

Ce type implémente le IDisposable interface. Lorsque vous avez fini d’utiliser une instance du type, vous devez la supprimer directement ou indirectement. Pour supprimer le type directement, vous devez appeler sa Dispose méthode dans un try/catch bloc. Pour la supprimer indirectement, utiliser une construction de langage telles que using (en c#) ou Using (en Visual Basic). Pour plus d’informations, consultez la section « Utilisant un objet qui implémente IDisposable » dans la IDisposable rubrique de l’interface.

La SecureString classe et ses membres ne sont pas visibles par COM. Pour plus d'informations, consultez ComVisibleAttribute.

Dans cette section :

Chaîne de Visual Studio. SecureString
Opérations de SecureString
SecureString et l’interopérabilité
SecureString d’est-il sécurisé ?

Une instance de la System.String classe est immuable et, lorsque vous n’est plus nécessaire, 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 est supprimé de la mémoire de l’ordinateur. Étant donné que System.String les instances sont immuables, les opérations qui semblent modifier une instance existante créent en fait une copie pour manipuler. 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 de la mémoire de l’ordinateur.

A SecureString objet est semblable à un String de l’objet car il a une valeur de texte. 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, qui 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 par votre application qui appelle la Dispose méthode ou par le garbage collector .NET Framework.

Pour en savoir plus sur les limitations de la SecureString de classe, consultez la est-il sécurisé SecureString ? section.

Retour au début

La SecureString classe contient des membres qui vous permettent d’effectuer les opérations suivantes :

Instancier une SecureString objet

Vous instanciez un SecureString objet en appelant son constructeur sans paramètre.

Ajouter des caractères à un SecureString objet

Vous pouvez ajouter un seul caractère à la fois à un SecureString objet en appelant son AppendChar ou InsertAt (méthode).

System_CAPS_importantImportant

A SecureString objet ne doit jamais être construit à partir d’un String, car les données sensibles seront déjà soumise aux conséquences de persistance de mémoire de la liste immuable String classe. La meilleure façon de construire un SecureString objet porte d’une source de non managée de caractère à temps, telles que le Console.ReadKey (méthode).

Supprimez les caractères d’un SecureString objet

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).

Rendre le SecureString objet en lecture seule

Une fois que vous avez défini la chaîne qui le SecureString objet représente, vous appelez ses MakeReadOnly méthode afin que la chaîne en lecture seule.

Obtenir des informations sur la SecureString objet

Le SecureString classe possède uniquement deux membres qui fournissent des informations sur la chaîne : son Length qui indique le nombre d’unités de code encodée en UTF16 dans la chaîne ; et le IsReadOnly, méthode, ce qui indique si l’instance est en lecture seule.

Libérer la mémoire allouée à la SecureString instance

Étant donné que SecureString implémente la IDisposable interface, vous libérer sa mémoire en appelant le Dispose (méthode).

Le SecureString classe ne possède aucun membre qui inspecte, compare ou convertit la valeur d’un SecureString. L’absence de ces membres permet de protéger la valeur de l’instance d’une exposition accidentelle ou malveillante. Utilisez les membres appropriés de le System.Runtime.InteropServices.Marshal class, telle que la SecureStringToBSTR (méthode), pour manipuler la valeur d’un SecureString objet.

La bibliothèque de classes .NET Framework utilise couramment SecureString instances comme suit :

Retour au début

É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. La Marshal classe a cinq méthodes que cela :

Chacune de ces méthodes crée une chaîne de texte en clair dans la mémoire non managée. Il incombe au développeur de zéro et libérer cette mémoire dès qu’il n’est plus nécessaire. Chacune des méthodes d’allocation mémoire et de conversion de chaîne a une méthode correspondante à zéro et libérer la mémoire allouée :

Méthode d’allocation et de conversion

Zéro et free (méthode)

Marshal.SecureStringToBSTR

Marshal.ZeroFreeBSTR

Marshal.SecureStringToCoTaskMemAnsi

Marshal.ZeroFreeCoTaskMemAnsi

Marshal.SecureStringToCoTaskMemUnicode

Marshal.ZeroFreeCoTaskMemUnicode

Marshal.SecureStringToGlobalAllocAnsi

Marshal.ZeroFreeGlobalAllocAnsi

Marshal.SecureStringToCoTaskMemUnicode

Marshal.ZeroFreeGlobalAllocUnicode

Retour au début

Lors de la création correctement, un SecureString instance fournit plus de protection de données qu’un 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. Le garbage collection de String objets est non déterministe. En outre, étant donné que sa mémoire n’est pas épinglée, le garbage collector effectuer des copies supplémentaires de String valeurs lors du déplacement et le compactage de mémoire. 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).

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 la sécurisation un SecureString est de l’instance. à savoir :

Plateforme

Sur le système d’exploitation Windows, le contenu d’un SecureString tableau de caractères interne de l’instance est chiffrée. Toutefois, si car il manque des API ou des problèmes de gestion de clés, le chiffrement n’est pas disponible sur toutes les plateformes. Pour cette raison, SecureString est disponible sur le bureau (Windows uniquement) et non sur .NET Core.

Durée

Même si le SecureString implémentation est en mesure de tirer parti de chiffrement, le texte brut est attribué à la SecureString instance peut-être être exposée à des moments différents :

  • É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.

  • Chaque fois que la valeur de la chaîne sécurisée est modifiée par les méthodes telles que AppendChar ou RemoveAt, il doit être déchiffré (c'est-à-dire converti précédent en texte brut), modifié, puis chiffrées à nouveau.

  • Si la chaîne sécurisée est utilisée dans un appel d’interopérabilité, il doit être converti pour une chaîne ANSI, une chaîne Unicode ou une chaîne binaire (BSTR). Pour plus d'informations, voir la section SecureString et l’interopérabilité.

L’intervalle de temps pour lequel le SecureString valeur de l’instance est exposée est simplement réduit par rapport à la String classe.

Stockage et d’utilisation

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 rester confidentiel. Toutefois, en dehors de .NET Framework lui-même, pas de mécanisme d’utilisation prend en charge SecureString. Cela signifie que la chaîne sécurisée doit être convertie en un format exploitable (généralement un formulaire de texte en clair) qui peut être reconnu par sa cible, et que le déchiffrement et conversion doivent se trouver dans l’espace de l’utilisateur.

Globale, SecureString est plus sûre que String car elle limite l’exposition des données de chaîne qui tient compte. Toutefois, ces chaînes peuvent toujours être exposées à n’importe quel processus ou une opération qui a accès à la mémoire brute, par exemple un processus malveillant en cours d’exécution sur l’ordinateur hôte, un vidage de processus ou un fichier d’échange visible à l’utilisateur. 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.

Retour au début

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.

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();
        }
    }
}

.NET Framework
Disponible depuis 2.0

Tous les membres statiques publics ( Shared en Visual Basic) de ce type sont thread-safe. Les membres d’instance n’ont pas la garantie d’être thread-safe.

Retour au début
Afficher: