[C#] Simplifier l’utilisation de SecureString

Le 29 juillet 2010 à 06:54

Quand vous utilisez un String, celui-ci est stocké en clair en mémoire. Cela peut être problématique surtout quand vous avez besoin de travailler sur des informations sensibles (mot de passe, carte bancaire, licence… etc).

Pour cela, la classe SecureString (System.Security.SecureString), disponible depuis le framework .NET 2.0, permet de mettre en mémoire une chaîne de caractère de manière cryptée (utilisant DPAPI). De plus, avec SecureString vous contrôlez sa disposition en mémoire, ce qui n’est pas forcément le cas d’un “simple” String.

Par contre, son utilisation n’est pas aussi “simple” qu’un String. Pour cela je propose deux méthodes d’extensions :

Convertir un String en SecureString :

public static SecureString ConvertToSecureString(this string value)
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }

    char[] chars = value.ToCharArray();
    SecureString secureValue = new SecureString();

    foreach (char c in chars)
    {
        secureValue.AppendChar(c);
    }
    secureValue.MakeReadOnly();

    return secureValue;
}

Convertir un SecureString en String :

public static string ConvertToString(this SecureString value)
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }

    IntPtr ptrString = IntPtr.Zero;
    try
    {
        ptrString = Marshal.SecureStringToGlobalAllocUnicode(value);
        return Marshal.PtrToStringUni(ptrString);
    }
    finally
    {
        Marshal.ZeroFreeGlobalAllocUnicode(ptrString);
    }
}

Et l’utilisation (didactique, je ne le conseille pas en cas réel ! Ici c’est en “dur” ; alors que c’est à utiliser par rapport aux données entrées par l’utilisateur par exemple ;-))

String myPassword = "password"; // à ne pas faire ! Juste pour exemple
SecureString securePassword = myPassword.ConvertToSecureString();

Trace.WriteLine(securePassword.ConvertToString());

A bientôt !

Ajouter un commentaire

biuquote
  • Commentaire
  • Prévisualiser
Loading

A propos de l'auteur

Mathieu Perrein - Software Solutions Manager, Software Architect, Trainer MCT, MSP de 2010 à 2012.

 

MSP

 

MSP

MSP

 MSPD

MCT

 

Facebook

 

Ce blog est strictement personnel et les opinions exprimées ici n'engagent donc que moi, et pas mon employeur.

Tags

Vous avez désactivé JavaScript ou bien vous possédez une ancienne version d'Adobe Flash Player. Téléchargez la dernière version de Flash Player.