2012-04-28 62 views
0

我正在嘗試創建一個客戶端和服務器,以便將文件從客戶端安全地發送到服務器並進行加密。首先,我將使用RSA在雙方(客戶端到服務器)之間發送DES密鑰。我發送了RSA公衆使用它並將加密的DES密鑰發送到服務器並解密。然後我將文件名長度,文件名和數據(加密的)添加到要發送到服務器的字節數組中。使用DES解密文件時,我收到了一個不好的數據異常,所以我認爲文件發送錯誤或者DES密鑰從客戶端發送到服務器錯誤。該文件也可以在原始位置進行解密。解密時出現錯誤的數據錯誤

下面是客戶端代碼:

//encrypt the file with the des key 
      byte [] encryptedFile = DESEncrypt(fileBytes); 
      MessageBox.Show("enc file length " + encryptedFile.Length); 
      //send the file 
      byte[] k = DESdecrypt(encryptedFile); 

      byte[] fileNameByte = Encoding.ASCII.GetBytes(Path.GetFileName(filePath.Text)); 

      byte[] clientData = new byte[4 + fileNameByte.Length + encryptedFile.Length]; 
      byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length); 

      fileNameLen.CopyTo(clientData, 0); 
      fileNameByte.CopyTo(clientData, 4); 
      encryptedFile.CopyTo(clientData, 4 + fileNameByte.Length); 

      soc.Send(clientData); 

這裏是服務器代碼:

byte[] clientData = new byte[1024 * 5000]; 
       int receivedBytesLen = s.Receive(clientData); 
       byte[] b = clientData; 
       int fileNameLen = BitConverter.ToInt32(clientData, 0); 

       fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen); 
       byte[] l = Encoding.ASCII.GetBytes(fileName); 
       Console.WriteLine("Client:{0} connected & File {1} started received.", s.RemoteEndPoint, fileName); 
       Console.WriteLine("buffer size : ", b.Length); 
       Console.WriteLine("index : ", 4 + fileNameLen); 

       string temp = System.Text.Encoding.UTF8.GetString(b, 3 + fileNameLen, receivedBytesLen); 
       fileBytes = System.Text.Encoding.UTF8.GetBytes(temp); 
       Console.WriteLine("rec file"); 

      } 
      catch (Exception exx) 
      { 
       Console.WriteLine(exx.ToString()); 
       Console.Read(); 
      } 
      //decrypt 
      byte[] decryptedFile = null; 
      try 
      { 

       decryptedFile = DESdecrypt(fileBytes); 
      } 
      catch(Exception exx) 
      { 
       Console.WriteLine(exx.ToString()); 
       Console.Read(); 
      } 
+0

可能相關/同一用戶:http://stackoverflow.com/questions/10362409/cannot-decrypt-rsa-encrypted-key – CodesInChaos 2012-04-28 10:37:33

+0

第一個不是同一個用戶。其次問題解決了我從收到的文件中得到1個錯誤的字節。例如我使用(4-1000),加密的數據是從(5-1001)錯誤的方式獲取我的數據塊。 – user1362274 2012-04-28 12:12:34

回答

0

的問題是,我試圖解密錯誤塊。這是因爲我用錯索引在

string temp = System.Text.Encoding.UTF8.GetString(b, 3 + fileNameLen, receivedBytesLen); 

和更新爲:當解密的數據是1496

Array.Copy(b, fileNameLen + 4, fileBytes, 0, dataLengthInt - fileNameLen-4); 

在我使用的receivedBytesLen一個文件是2756個字節,因此,我需要發送的數據長度從數據塊中提取它。

相關問題