>What protocol are you using?  What I mean is application layer protocol. But 
 >since in your example, you're using your own protocol,  why not send both 
 >length and data.
  Example.      
  Then in you receiving end, do
recv 4 bytes, get length, and recv until received data equals to length.

  And decrypt.  
  - re

You mean furst to send the encryped string and next the length of the string as 
value?

Example for server:




  send(sock, encrypted_string, 25, 0);



  send(sock, encrypted_string_length, 25, 0);


For client



 recv(sock, encrypted_string, 25, 0);




 



  recv(sock, encrypted_string_length, 25, 0);




 


 
  
  
  
 On Sun, May 1, 2011 at 4:34 PM, derleader mail   derlea...@abv.bg >  wrote:
         
  The encrypted output is not a NULL terminated string so strlen will not work. 
 
   >> EVP_DecryptUpdate(&ctx, (unsigned char *)plaintextz, &out_len, 
(unsigned char *)ciphertext, strlen(ciphertext));
     
          Use the length output from the encryption part.

   Thank you very much for the reply. The problem is that the encryption and 
decryption must be on separate machines. I need a way to take the size of the 
encrypted message using language function like strlen       (). Is there other 
solution?
       Hi,  
  What protocol are you using?  If you cannot send the "length" of the 
encrypted data, then you cannot decrypt it properly.   

I'm going to use stream protocol - TCP/IP. Here is the template source code of 
the server without the encryption part

#include  
#include  
#include  
#include  
#include  
#include  

void* thread_proc(void *arg);

int main(int argc, char *argv[])
{



 struct sockaddr_in sAddr;



 int listensock;



 int result;



 int nchildren = 1;



 pthread_t thread_id;



 int x;



 int val;



 



 if (argc > 1) {





 nchildren = atoi(argv[1]);



 }




 listensock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);




 val = 1;



 result = setsockopt(listensock, SOL_SOCKET, SO_REUSEADDR, &val, 
sizeof(val));



 if (result < 0) {







 perror("server5");







 return 0;



 }




 sAddr.sin_family = AF_INET;



 sAddr.sin_port = htons(1972);



 sAddr.sin_addr.s_addr = INADDR_ANY;




 result = bind(listensock, (struct sockaddr *) &amp;sAddr, sizeof(sAddr));



 if (result < 0) {







 perror("exserver5");







 return 0;



 }




 result = listen(listensock, 5);



 if (result < 0) {







 perror("exserver5");







 return 0;



 }



 for (x = 0; x < nchildren; x++) {



 result = pthread_create(&amp;thread_id, NULL, thread_proc, (void *) 
listensock);



 if (result != 0) {



 
 printf("Could not create thread.\n");



 
 return 0;



 }



 sched_yield();



 }



 pthread_join (thread_id, NULL);
}

void* thread_proc(void *arg)
{

 int listensock, sock;

 char buffer[25];

 int nread;


 listensock = (int) arg;


 while (1) {



 sock = accept(listensock, NULL, NULL);



 printf("client connected to child thread %i with pid %i.\n", pthread_self(), 
getpid());



 nread = recv(sock, buffer, 25, 0);



 buffer[nread] = '\0';



 printf("%s\n", buffer);



 send(sock, buffer, nread, 0);



 close(sock);



 printf("client disconnected from child thread %i with pid %i.\n", 
pthread_self(), getpid());

 }
}
   
 
 

Reply via email to