2014-06-08 7 views
0

Je suis débutant en C#. Et jusqu'à présent, je connais un public static variables peuvent être accessibles par toute autre classe et les variables locales à l'intérieur d'une méthode public static n'est pas accessible par une autre classe. Donc, dans ce cas, je veux avoir accès à toutes les touches de la méthode Main() et faire quelque chose avec eux. Comment puis je faire ça? Il doit y avoir un moyen. J'ai pensé utiliser return mais il ne retournera qu'une seule valeur de clé celle que je choisirai. Y a-t-il un moyen de retourner plus d'une valeur à la fois?Accédez aux variables locales à partir de la méthode Main()

C'est le code qui génèrent des clés

class keyCreation 
{ 
    public static void Key_Derivation_Function(byte[] password) 
    { 
     string salt = "12345678"; 
     byte[] saltbyte = Encoding.UTF8.GetBytes(salt); 
     Console.WriteLine("Password length: " + password.Length); 
     Console.WriteLine("Saltbyte lenght: " + saltbyte.Length); 
     Rfc2898DeriveBytes keyGenerate = new Rfc2898DeriveBytes(password, saltbyte, 1000); 
     byte[] key1 = keyGenerate.GetBytes(16); 
     byte[] key2 = keyGenerate.GetBytes(32); 
     byte[] key3 = keyGenerate.GetBytes(16); 
     byte[] key4 = keyGenerate.GetBytes(32); 
     byte[] key5 = keyGenerate.GetBytes(16); 
     byte[] key6 = keyGenerate.GetBytes(16); 
     byte[] key7 = keyGenerate.GetBytes(32); 
    } 
} 

C'est la principale méthode,

class Program 
{ 
    static void Main(string[] args) 

    { 

     //user giving input 
     Console.WriteLine("Plaintext: "); 
     string plaintext = Console.ReadLine(); 
     byte[] text = Encoding.UTF8.GetBytes(plaintext); 
     Console.WriteLine("Enter Password: "); 
     string pass = Console.ReadLine(); 
     byte[] password = Encoding.UTF8.GetBytes(pass); 
     keyCreation.Key_Derivation_Function(password); 
     // get the keys and do something with the keys 

    } 
} 

Répondre

0

Comme exemple, vous pouvez retourner la même classe, qui contient une méthode statique:

public class keyCreation 
{ 
    public byte[] Key1; 
    public byte[] Key2; 
    public byte[] Key3; 
    public byte[] Key4; 
    public byte[] Key5; 
    public byte[] Key6; 
    public byte[] Key7; 

    public static keyCreation Key_Derivation_Function(byte[] password) 
    { 
     string salt = "12345678"; 
     byte[] saltbyte = Encoding.UTF8.GetBytes(salt); 
     Console.WriteLine("Password length: " + password.Length); 
     Console.WriteLine("Saltbyte lenght: " + saltbyte.Length); 
     Rfc2898DeriveBytes keyGenerate = new Rfc2898DeriveBytes(password, saltbyte, 1000); 
     return new keyCreation() 
     { 
      Key1 = keyGenerate.GetBytes(16), 
      Key2 = keyGenerate.GetBytes(32), 
      Key3 = keyGenerate.GetBytes(16), 
      Key4 = keyGenerate.GetBytes(32), 
      Key5 = keyGenerate.GetBytes(16), 
      Key6 = keyGenerate.GetBytes(16), 
      Key7 = keyGenerate.GetBytes(32) 
     }; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     //user giving input 
     Console.WriteLine("Plaintext: "); 
     string plaintext = Console.ReadLine(); 
     byte[] text = Encoding.UTF8.GetBytes(plaintext); 
     Console.WriteLine("Enter Password: "); 
     string pass = Console.ReadLine(); 
     byte[] password = Encoding.UTF8.GetBytes(pass); 
     var result = keyCreation.Key_Derivation_Function(password); 
     // get the keys and do something with the keys   
     var key1 = result.Key1; 
     var key2 = result.Key2; 
     ... 
    } 
} 

Dans ce cas, la keyCreation de classe contient tous les champs KEYN et retourne son exemple de méthode Key_Derivation_Function.

Une autre façon est hors/ref params:

public class keyCreation 
{ 
    public static void Key_Derivation_Function(byte[] password, out byte[] key1, out byte[] key2, ...) 
    { 
     string salt = "12345678"; 
     byte[] saltbyte = Encoding.UTF8.GetBytes(salt); 
     Console.WriteLine("Password length: " + password.Length); 
     Console.WriteLine("Saltbyte lenght: " + saltbyte.Length); 
     Rfc2898DeriveBytes keyGenerate = new Rfc2898DeriveBytes(password, saltbyte, 1000); 
     key1 = keyGenerate.GetBytes(16); 
     key2 = keyGenerate.GetBytes(32); 
     ... 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     ... 
     byte[] key1, key2, ...; 
     keyCreation.Key_Derivation_Function(password, out key1, out key2, ...); 
     ... 
    } 
} 

vous pouvez également revenir tuples, des tableaux de tableaux, etc.

+0

donc, le type de retour est une méthode! wow jamais vu ce type de codage avant. Merci – Giliweed

0

Faire la fonction retourner toutes les clés. Peut-être comme un tableau de clés (byte[][]). Ou, si vous ne voulez pas le double tableau vous définissez une classe d'emballage:

class Key { public byte[] Bytes; } 

et retourner un Key[].

N'utilisez pas trop de variables statiques. Ils rendent le programme confus parce qu'il est difficile de suivre quand ils sont écrits et quand ils sont lus.

Questions connexes