2009-07-29 7 views
0

Je voudrais créer une variable, une variable sécurisée, qui est plus ou moins un CONST à utiliser dans mon code. J'ai regardé en utilisant System.Security.SecureString, et cela ressemble à ce pourrait être le billet car je ne veux pas que l'utilisateur découvre ce mot de passe. Le seul problème vient avec l'initialisation. Dans la plupart des cas, il semble que SecureString soit le mieux défini par l'utilisateur. Je ne veux pas ça. Une option que je suis venu accross ressemble à ceci:Comment initialiser SecureString pour readonly

unsafe public static void Main() 
    { 
     SecureString testString; 
     // Define the string value to assign to a new secure string. 
     char[] chars = { 't', 'e', 's', 't' }; 

     // Instantiate a new secure string. 
     fixed(char* pChars = chars) 
     { 
     testString = new SecureString(pChars, chars.Length); 
     } 
     // Display secure string length. 
     Console.WriteLine("The length of the string is {0} characters.", 
         testString.Length); 
    } 

seul problème est, le tableau de caractères « t », « e », « s », « t » est probablement encore emballé dans la mémoire après une compilation . Existe-t-il un bon moyen de définir la valeur d'un SecureString à une valeur constante avant la compilation et que cette valeur soit brouillée?

+1

Qu'essayez-vous d'accomplir? Vous voulez stocker un mot de passe «secret» pour cacher certaines fonctionnalités? Le moment où le code est divulgué/découvert, vous êtes 'sécurité' est parti! Une meilleure solution, mais toujours pas géniale, est d'avoir votre application. téléphone à la maison. –

+0

Le code (source) ne doit pas être divulgué, juste la distribution de l'exécutable serait suffisante! La décompilation peut suffire ... ou l'exécuter dans un débogueur. Un secret que vous envoyez à une personne non sécurisée n'est plus un secret. – Kitsune

+0

La racine de ceci est que je dois écrire un x509certificate2 à classer, et mot de passe le protéger. Je le relis ensuite en utilisant le même mot de passe. – Nick

Répondre

0

Vous pouvez définir chaque entrée de chars sur une valeur fortement aléatoire pour supprimer la valeur de la mémoire dynamique. La chaîne sera toujours là dans l'exécutable, cependant.