Hi Peter,
Add padding for CBC mode encryption.
Or u can use CFB mode. EVB_bf_cfb()

-Shafeek

On Sat, Apr 30, 2011 at 7:26 PM, derleader mail <derlea...@abv.bg> wrote:

>  Hi,
>    I have a problem with the code below. There is a bug that I can't find
> and fix.
> This is the output when I try to run it:
>
> [root@localhost test]# ./a.out sdcsdsdcd
> Entering Encryption Stage:
>
> String to encrypt: sdcsdsdcd
>
> Encryption Successful
>
> Entering Decryption Stage
>
> Error Whilst DecryptFinal
> 19041:error:06065064:lib(6):func(101):reason(100):evp_enc.c:325:
>
>
> Here is the source code:
>
>
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <openssl/evp.h>
> #include <openssl/rand.h>
>
> #define input_buf_size 1024
> #define output_buf_size 1032
>
> int main(int argc, char *argv[])
> {
>
>         if (argc !=2)
>         {
>                 printf("Usage: test1 <stringtoencrypt>\n");
>                 exit(1);
>         }
>
>         char *string;
>
>         int encoutlen, decoutlen, enctotallen, dectotallen;
>
>         unsigned char iv[8];
>         unsigned char  password[16];
>         unsigned char enc_outbuf[output_buf_size];
>         char enc_inbuf[input_buf_size];
>         unsigned char dec_outbuf[input_buf_size];
>         char dec_inbuf[output_buf_size];
>         EVP_CIPHER_CTX ectx;
>         EVP_CIPHER_CTX dctx;
>
>         /*
>          * Begin the encode - decode
>          *
>          * Get our inputs and the random IV
>          *
>          */
>
>         string = argv[1];
>
>         RAND_bytes(iv, 8);
>         RAND_bytes(password, 16);
>
>         printf("Entering Encryption Stage:\n\n");
>         printf("String to encrypt: %s\n\n", string);
>
>         EVP_CIPHER_CTX_init(&ectx);
>
>
>         EVP_EncryptInit(&ectx, EVP_bf_cbc(), password, iv);
>
>         bzero (&enc_inbuf, input_buf_size);
>
>         if(!EVP_EncryptUpdate(&ectx, enc_outbuf, &encoutlen, string,
> strlen(string)))
>         {
>                 printf("Error whilst EncryptUpdate\n");
>                 return 0;
>         }
>
>         if(!EVP_EncryptFinal(&ectx, enc_outbuf + encoutlen, &enctotallen))
>         {
>                 printf("Error Whilst EncryptFinal\n");
>                 return 0;
>         }
>
>         encoutlen += enctotallen;
>
>         printf("Encryption Successful\n\n");
>         printf("Entering Decryption Stage\n\n");
>
>         EVP_CIPHER_CTX_init(&dctx);
>         EVP_DecryptInit(&dctx, EVP_bf_cbc(), password, iv);
>
>         bzero (&dec_inbuf, output_buf_size);
>         bzero (&dec_outbuf, input_buf_size);
>
>         if (!(EVP_DecryptUpdate(&dctx, dec_outbuf, &decoutlen, enc_outbuf,
> output_buf_size)))
>         {
>                 printf("Error Whilst DecryptUpdate\n");
>                 return 0;
>         }
>
>         if (!(EVP_DecryptFinal(&dctx, dec_outbuf + decoutlen,
> &dectotallen)))
>         {
>                 printf("Error Whilst DecryptFinal\n");
>                 ERR_print_errors_fp(stdout);
>                 return 0;
>         }
>
>         decoutlen += dectotallen;
>
>         printf("Decryption Successful\n\n");
>
>         printf("Decrypted String is: %s\n", dec_outbuf);
>
>         return 0;
>
> }
>
> Any help will be highly appreciated!
>
> Regards
> Peter
>

Reply via email to