On Sat April 30 2011, derleader mail wrote:
> 
> Hi, 
>   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?

Yes, send the encrypted length along with the encrypted message.

How that gets done is usually part of the protocol you choose for
exchanging encrypted messages.
And since you didn't mention any protocol. . . .

Mike
> 
> Regards
>       
>       - re
>   
>  On Sun, May 1, 2011 at 12:27 AM, derleader mail   derlea...@abv.bg >  wrote:
>    
> Hi,
> 
> 
>  I'm trying to code a C program that can convert very big number of 
> characters. The problem is that there is an error in decryption.
> 
> This is the code:
> 
> //gcc test_Blowfish.c -L/usr/local/ssl/lib/ -lssl -lcrypto -Wall
> 
> 
> #include  
> #include  
> 
> #include  
> #include  
> #include  
> 
> 
> 
> int main(void) {
> 
> 
> 
> 
> 
> 
>  char plaintext[1024] = "{aaX{aaX57 : {223 : 
> 2323}}{}{}{}{}{}{3535:42424}242424242242424243r23r23r23r23r23r23r3r{}pppa57 : 
> {223 : 
> 2323}}{}{}{}{}{}{3535:42424}242424242242424243r23r23r23r23r23r23r3r{}pppa{aaX57
>  : {223 : 
> 2323}}{}{}{}{}{}{3535:42424}242424242242424243r23r23r23r23r23r23r3r{}pppa";
> 
> 
> 
>  char plaintextz[1024];
> 
> 
> 
>  char ciphertext[1024]= {0,};
> 
> 
> 
>  char mykey[EVP_MAX_KEY_LENGTH] = "blowfish_key";
> 
> 
> 
>  char iv[EVP_MAX_IV_LENGTH] = "blowfish";
> 
> 
> 
>  int tmp_len = 0, in_len, out_len=0;
> 
> 
> 
>  EVP_CIPHER_CTX ctx;
> 
> 
> 
> 
> 
>  //memset(mykey,0,sizeof(mykey));
> 
> 
> 
>  //memset(iv,0,sizeof(iv));
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>  printf("No encrypt: %s\n", plaintext);
> 
> 
>  
> 
> 
> 
>  printf("No encrypt size: %d\n", strlen(plaintext));
> 
> 
> 
> 
> 
>  //Encrypt
> 
> 
> 
>  EVP_EncryptInit(&ctx, EVP_bf_cfb(), (unsigned char *)mykey, (unsigned 
> char *)iv);
> 
> 
> 
>  EVP_EncryptUpdate(&ctx, (unsigned char *)ciphertext, &out_len, 
> (unsigned char *)plaintext, strlen(plaintext));
> 
> 
>  //Block through the mem to be encrypted
> 
> 
> 
>  tmp_len += out_len;
> 
> 
> 
>  EVP_EncryptFinal(&ctx, (unsigned char *) &ciphertext[out_len], 
> &out_len); //Finish any remaining encryption and throw a pad on
> 
> 
> 
>  tmp_len += out_len;
> 
> 
> 
>  printf("Encrypted: %s\n", ciphertext);
> 
> 
> 
>  printf("Encrypted size: %d\n", tmp_len);
> 
> 
> 
> 
> 
>  //Reset memory for Decryption
> //
> 
> 
>  memset(plaintext,0,sizeof(plaintext));
> 
> 
> 
>  in_len = tmp_len;
> 
> 
> 
>  out_len = tmp_len = 0;
> 
> 
> 
> 
> 
>  //decrypt
> 
> 
> 
>  EVP_DecryptInit(&ctx, EVP_bf_cfb(), (unsigned char *)mykey, (unsigned 
> char *)iv);
> 
> 
> 
>  EVP_DecryptUpdate(&ctx, (unsigned char *)plaintextz, &out_len, 
> (unsigned char *)ciphertext, strlen(ciphertext));
> 
> 
> 
>  tmp_len += out_len;
> 
> 
> 
>  EVP_DecryptFinal(&ctx, (unsigned char *)&plaintextz[out_len], 
> &out_len);
> 
> 
> 
>  tmp_len += out_len;
> 
> 
> 
> 
> 
>  //Zero out the pad
> 
> 
> 
>  memset(&plaintext[tmp_len],0,(int)(sizeof(plaintext)) - tmp_len);
> 
> 
> 
> 
> 
>  printf("Decrypted : %s\n", plaintextz);
> 
> 
> 
>  printf("Decrypted size: %d\n", tmp_len);
> 
> 
> 
> 
> 
>  printf("Block Size: %d\n",EVP_CIPHER_CTX_block_size(&ctx));
> 
> 
> 
> 
> 
>  return 0;
> } 
> 
> 
> 
> This is the output:
> 
> [root@localhost test]# ./a.out 
> No encrypt: {aaX{aaX57 : {223 : 
> 2323}}{}{}{}{}{}{3535:42424}242424242242424243r23r23r23r23r23r23r3r{}pppa57 : 
> {223 : 
> 2323}}{}{}{}{}{}{3535:42424}242424242242424243r23r23r23r23r23r23r3r{}pppa{aaX57
>  : {223 : 
> 2323}}{}{}{}{}{}{3535:42424}242424242242424243r23r23r23r23r23r23r3r{}pppa
> No encrypt size: 267
> Encrypted: �A-��  W  =?:�$�i �_�8:�F�wo#�5 � @D�mo��-I ���F�Q�J�#��F�0b� ;�`� 
> C䦱�~6�)ހ�YG �ed�Ӕ�Z%�9!mdvϋ���\���QB��}�N ����@_�W�F�e"�
> Encrypted size: 267
> Decrypted : {aaX{aaX57 : {223 : 
> 2323}}{}{}{}{}{}{3535:42424}242424242242424243r23r23r23r23r23r23r3r{}pppa57 : 
> {223 : 2323}}{}{}{}{}{}{3535:4242
> Decrypted size: 131
> Block Size: 1
> 
> As youy see the decrypted size number is less that the original.
> Any idea where is the problem?
> 
>    
>  
>  


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to