2012-04-28 3 views
0

Я пытаюсь создать клиент и сервер для безопасного и зашифрованного файла с клиента на сервер. Сначала я буду использовать RSA для отправки ключа DES между двумя сторонами (от клиента к серверу). Я отправил публикацию RSA, используя ее, и отправил ключ DES, зашифрованный на сервер, и расшифрованный. Затем я добавил длину имени файла, имя файла и данные (зашифрованные) в массив байтов, который будет отправлен на сервер. Дешифруя файл с помощью DES, я получил неправильное исключение данных, поэтому я подумал, что либо файл отправлен неправильно, либо DES-код был отправлен неправильно с клиента на сервер. Также файл может быть расшифрован в начале координат.Ошибка Bad Data при дешифровании

Вот код клиента:

//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

+0

первый не тот же пользователь. во-вторых, проблема решена, я получал 1 неверный байт из полученного файла. например, я использую (4-1000), а зашифрованные данные - от (5-1001) - это просто неправильный способ получения моих данных из блока. – user1362274

ответ

0

Проблема заключается в том, что я пытаюсь расшифровать неправильный блок. Это потому, что я использовал неправильную индексацию в

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

и обновлена:

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

в файле я использовал receivedBytesLen это 2756 байт, а расшифрованные данные 1496, так что я должен был послать длину данных для извлечения из блока данных.

Смежные вопросы