2015-11-15 55 views
0

我正嘗試通過c#生成一個加密字母鍵不再比以前輸入的字符串。 例如我有一個方法CharCount計算字符並將其傳遞給屬性CI。然後在另一個類中有一個GenerateKey方法。我通過Ciph.Generatekey(CI)生成密鑰,CI給出了原始字符串的計數,但這裏的PROBLEM是我希望它生成一個隨機長度直到CI值,而不是它在CI中生成字符串長度。C#生成不超過字符串大小的加密密鑰

項目類別:

private static int CI; 
    static void Main(string[] args) 
    { 
     string Filecontents; 
     FileHandling FH = new FileHandling(); 
     Ciphering Ciph = new Ciphering(); 
     Filecontents = FH.StreamFile(); 
     string CC = CharCount(Filecontents); 
     bool test = int.TryParse(CC, out CI); 
     Console.WriteLine(Ciph.GenerateKey(CI)); 
    } 
public static string CharCount(string info) 
     { 
      StringBuilder result = new StringBuilder(); 
      int count = 0; 
      string st = info; 
      foreach (char c in st) 
      { 
       if (char.IsLetter(c)) 
       { 
        count++; 
       } 
      } 
      result.Append(count); 
      return result.ToString(); 
     } 

加密中類:

class Ciphering 
    { 
     public string GenerateKey(int maxSize) 
     { 
      char[] chars = new char[62]; 
      chars = 
      "abcdefghijklmnopqrstuvwxyz".ToCharArray(); 
      byte[] data = new byte[1]; 
      using (RNGCryptoServiceProvider encrypt = new RNGCryptoServiceProvider()) 
      { 
       encrypt.GetNonZeroBytes(data); 
       data = new byte[maxSize]; 
       encrypt.GetNonZeroBytes(data); 
      } 
      StringBuilder result = new StringBuilder(maxSize); 
      foreach (byte c in data) 
      { 
       result.Append(chars[c % (chars.Length)]); 
      } 
      return result.ToString(); 
     } 
    } 
+0

你的代碼中有一些明顯的編程錯誤,主要你應該記住,你不必分配一個值直接指向一個變量,'encrypt.GetNonZeroBytes(data);'後面是'data = new byte [maxSize];'當然是一個嚴重的錯誤。 –

回答

0

您可以使用this answer檢索最小值和最大值之間的值。您應該先使用它來生成密鑰中的字符數量。

您也可以使用它來生成隨機字符(通過使用範圍爲0..26的索引)。目前,你的關鍵字符的生成有點偏向(因爲模數運算符會使得索引字符比索引較高的字符更可能出現。