0

code to send data to server

BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in));
OutputStream ostream = sock.getOutputStream(); 
 PrintWriter pwrite = new PrintWriter(ostream, true);
 // receiving from server ( receiveRead  object)
 InputStream istream = sock.getInputStream();
 BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));

 String receiveMessage, sendMessage;               
 while(true)
 {
    sendMessage = keyRead.readLine();  // keyboard reading
    String enc = crypt.encrypt(sendMessage, serverPublicKey);
    System.out.println("sending to server: "+enc);
    pwrite.println(enc);       // sending to server
    pwrite.flush();                    // flush the data
    if((receiveMessage = receiveRead.readLine()) != null) //receive from server
    {
        //System.out.println(crypt.decrypt(receiveMessage, clientPrivateKey)); // displaying at DOS prompt
        System.out.println(receiveMessage);
    }         
  }

output after encryption looks like below on console

sending to server: YRJ7ZNgqSQ56nGc8ff7ktoybYEohQJS2R+Vh3YN1YfHipUS64MyFrrYAzL4CiTPv2WF7zvaJst1A
qsiPsv3/1Q==

code to receive on server

      BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in));
      // sending to client (pwrite object)
      OutputStream ostream = sock.getOutputStream(); 
      PrintWriter pwrite = new PrintWriter(ostream, true);

      // receiving from server ( receiveRead  object)
      InputStream istream = sock.getInputStream();
      BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));

      String receiveMessage, sendMessage;               
      while(true)
      {
        if((receiveMessage = receiveRead.readLine()) != null)  
        {
           //System.out.println(crypt.decrypt(receiveMessage, serverPrivateKey));
            System.out.println(receiveMessage);
        }         
        sendMessage = keyRead.readLine(); 
        String enc = crypt.encrypt(sendMessage, clientPublicKey);
        System.out.println("sending to clinet: "+enc);
        pwrite.println(enc);             
        pwrite.flush();
      }  

but data is received like

YRJ7ZNgqSQ56nGc8ff7ktoybYEohQJS2R+Vh3YN1YfHipUS64MyFrrYAzL4CiTPv2WF7zvaJst1A

rest of

qsiPsv3/1Q==

is received when i send something from server to client, please help me locate the problem, due to truncated data the decryption fails

Dakait
  • 2,531
  • 1
  • 25
  • 43

1 Answers1

2

You do not only encrypt the input but you also Base64 encode the encrypted bytes. Your Base64 encoder inserts line breaks every 76 characters, which is the standard for Base64 transfer encoding for MIME (RFC 2045). That is why on the server side your readLine() only reads in the first 76 characters.

You need to configure your Base64 encoder to not add line breaks.

Ralf
  • 6,735
  • 3
  • 16
  • 32