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 >