2013-02-06 19 views
0

我試圖在我的客戶端 - 服務器應用程序上實現加密,但自從我實現它之後,我無法在應用程序之間進行通信。加密流惡意使用

服務器:

private void CommsHandler(object client) 
    { 

     TcpClient tcpClient = (TcpClient)client; 

     StreamWriter writer; 
     StreamReader reader; 
     using (RijndaelManaged myRijindel = new RijndaelManaged()) 
     { 
      myRijindel.GenerateKey(); 
      myRijindel.GenerateIV(); 
      ICryptoTransform encryptor = myRijindel.CreateEncryptor(myRijindel.Key, myRijindel.IV); 

      byte[] Key = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 
       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16}; 
      byte[] IV = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 
       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16}; 

      CryptoStream secureStreamRead = new CryptoStream(tcpClient.GetStream(), myRijindel.CreateDecryptor(Key,IV), CryptoStreamMode.Read); 
      CryptoStream secureStreamWrite = new CryptoStream(tcpClient.GetStream(), myRijindel.CreateEncryptor(Key, IV), CryptoStreamMode.Write); 

      reader = new StreamReader(secureStreamRead); 
      writer = new StreamWriter(secureStreamWrite); 
     } 

     NetworkStream network = tcpClient.GetStream(); 


     char[] buffer = new char[4096]; 

     while (true) 
     { 
      try 
      { 
       reader.Read(buffer, 0, buffer.Length); 
      } 
      catch (Exception) 
      { 
       InsertLog(2, "Communication with client closed"); 
       break; 
      } 
      string message = new string(buffer); 
      Debug.Write(message); 

      doJob(message, writer, network); 

      for (int i = 0; i < buffer.Length; i++) 
      { 
       buffer[i] = (char)0; 
      } 
     } 

     tcpClient.Close(); 
    } 

客戶:

private void button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     client.Connect(textBox1.Text, Convert.ToInt16(textBox2.Text)); 


     using (RijndaelManaged myRijindel = new RijndaelManaged()) 
     { 
      myRijindel.GenerateKey(); 
      myRijindel.GenerateIV(); 
      ICryptoTransform encryptor = myRijindel.CreateEncryptor(myRijindel.Key, myRijindel.IV); 

      byte[] Key = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 
       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16}; 
      byte[] IV = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 
       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16}; 

      CryptoStream secureStreamRead = new CryptoStream(client.GetStream(), myRijindel.CreateDecryptor(Key, IV), CryptoStreamMode.Read); 
      CryptoStream secureStreamWrite = new CryptoStream(client.GetStream(), myRijindel.CreateEncryptor(Key, IV), CryptoStreamMode.Write); 

      reader = new StreamReader(secureStreamRead); 
      writer = new StreamWriter(secureStreamWrite); 
     } 

     network = client.GetStream(); 
     connected = true; 
     MessageBox.Show("Connected successfully", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Could not connect to server:" + Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

這有什麼錯我的執行?特別是在StreamWriterStreamReader部分。還是其他地方的問題?

+0

什麼是錯誤?什麼症狀?您只能盯着代碼來調試。 – usr

回答

2

使用塊總是在塊的末尾調用IDisposable.Dispose()。

所以,如果你說:你一旦結束塊

using (RijndaelManaged myRijindel = new RijndaelManaged()) 
{ 
    ... 
} 

你的加密提供商關閉。我會想象那是你的問題的一部分。