客户端未收到加密后数据被截断

Data Truncated After Encryption Not Received at Client

向服务器发送数据的代码

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);
    }         
  }

输出 加密后在控制台上如下所示

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

要在服务器上接收的代码

      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();
      }  

但是接收到的数据像

YRJ7ZNgqSQ56nGc8ff7ktoybYEohQJS2R+Vh3YN1YfHipUS64MyFrrYAzL4CiTPv2WF7zvaJst1A

其余

qsiPsv3/1Q==

从服务器向客户端发送东西时收到,请帮我定位问题,由于截断数据导致解密失败

您不仅对输入进行了加密,而且还对加密字节进行了 Base64 编码。您的 Base64 编码器每 76 个字符插入换行符,这是 Base64 transfer encoding for MIME (RFC 2045) 的标准。这就是为什么在服务器端你的 readLine() 只读取前 76 个字符。

您需要将 Base64 编码器配置为不添加换行符。