2012-04-28 2 views
0

클라이언트에서 서버로 파일을 안전하게 보내고 암호화하도록 클라이언트와 서버를 만들려고합니다. 먼저 RSA를 사용하여 양측 (클라이언트와 서버)간에 DES 키를 보냅니다. 나는 RSA 공개를 사용하여 암호화 된 DES 키를 서버로 전송하고 해독했다. 그런 다음 파일 이름 길이, 파일 이름 및 데이터 (암호화 된)를 서버로 전송 될 바이트 배열에 추가했습니다. DES를 사용하여 파일을 해독하는 동안 잘못된 데이터 예외가 수신되었으므로 파일이 잘못 전송되거나 DES 키가 클라이언트에서 서버로 잘못 전송되었다고 생각했습니다. 또한 파일을 원본에서 해독 할 수 있습니다.암호 해독 중에 잘못된 데이터 오류가 발생했습니다.

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

문제는 내가 잘못된 블록을 해독하기 위해 노력하고 있다는 것입니다 :

여기
//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); 

에 서버 코드입니다 : 여기

클라이언트 코드입니다. 그래서 난 데이터 길이를 전송하는 데 필요한 암호 해독 된 데이터가 1496 동안 2756 바이트가 receivedBytesLen 사용 전 파일에

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

입니다 : 이것은 내가

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

에 잘못된 색인을 사용하고 업데이트하기 때문이다 그것을 데이터 블록에서 추출합니다.

관련 문제