Hi Peter, The extra string in o/p is due to error in coding. u r passing incorrect length in EVP_DecryptUpdate.
if (!(EVP_DecryptUpdate(&dctx, dec_outbuf, &decoutlen, enc_outbuf, output_buf_size))) change above line to if (!(EVP_DecryptUpdate(&dctx, dec_outbuf, &decoutlen, enc_outbuf, encoutlen))) -Shafeek On Mon, May 2, 2011 at 3:09 PM, derleader mail <derlea...@abv.bg> wrote: > > Hi Peter, > Add padding for CBC mode encryption. > Or u can use CFB mode. EVB_bf_cfb() > > -Shafeek > > Hi, > Thank you for the reply. I have edit the code. > > Source Code: > > //gcc blowfish2.c -L/usr/local/ssl/lib/ -lssl -lcrypto -Wall > > > #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_cfb(), 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_cfb(), 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; > > } > > > This is the output: > > [root@localhost test]# ./a.out dcee > Entering Encryption Stage: > > String to encrypt: dcee > > > Encryption Successful > > Entering Decryption Stage > > Decryption Successful > > Decrypted String is: dcee��<�=�͜<I ���C� ���=�t����y�|:�|>s�� � h[j > �l��ȥg�L^�aPB=� > > everytime the string after "dcee" is diffrent. So I need padding. > Could you edit the source code in proper way. I have no idea how to add > padding. > > Regards > Peter > > > ----------------------------------------------------------------- > Дизайнерски обувки с до -70%. Регистрирай се и пазарувай. > <http://a.abv.bg/www/delivery/ck.php?oaparams=2__bannerid=4884__zoneid=63__oadest=http://clk.tradedoubler.com/click?p=191500&a=1875689&g=19425934> >