web-dev-qa-db-fra.com

Comment utiliser du code dangereux dans un contexte sûr?

J'ai besoin d'utiliser SecureString pour une classe Microsoft et j'ai trouvé le code suivant sur Internet :

public static class SecureStringExt
{
    public static SecureString ConvertToSecureString(this string password)
    {
        if (password == null)
            throw new ArgumentNullException("password");

        unsafe //Red highlighted line
        {
            fixed (char* passwordChars = password)
            {
                var securePassword = new SecureString(passwordChars, password.Length);
                securePassword.MakeReadOnly();
                return securePassword;
            }
        }
    }
}

Le seul problème est que le mot clé unsafe continue de me renvoyer une erreur en disant Cannot use unsafe construct in safe context. Malheureusement, je n'ai pas trouvé pourquoi cela se produit ...

Remarque: Le code ci-dessus s'exécute dans LINQPad mais pas dans VS2013 (avec resharper).

30
CodeArtist

Je ne sais pas si vous avez besoin d'un code dangereux dans ce cas (voir la réponse de @ mybirthname ).

Mais lorsqu'un code non sécurisé est nécessaire, il peut être activé dans les propriétés du projet.

  • Dans le menu principal, cliquez sur Project puis sur <ProjectName> properties...
  • Cliquez sur la page Build.
  • Sélectionnez Allow unsafe code.

Allow unsafe code

Ou on peut spécifier explicitement l'option de compilation / unsafe .

62
AlexD
    public static SecureString GetSecureString(string password)
    {
        SecureString secureString = new SecureString();

        foreach (char c in password)
        {
            secureString.AppendChar(c);
        }

        secureString.MakeReadOnly();
        return secureString;
    }

Vous pouvez faire la même chose sans code dangereux.

10
mybirthname