I am working with a legacy app and need to use OpenSSL to decrypt Blowfish-cbc. The library in question (http://search.cpan.org/~lds/Crypt-CBC-2.30/CBC.pm) uses a 56 byte key size while OpenSSL defaults to a 16 byte key size.
I think part of my problem is that EVP_BytesToKey only returns a 16 byte key. Is there any way to change the key size to 56 bytes? I've included my 16 byte code below. char *decrypt_bf(unsigned char *coded,int coded_len,unsigned char *keystr,int keystr_len) { //Make sure to #include <openssl/evp.h> //compile with -lcrypto if using gcc char buffer[1024]; unsigned char key[16]; unsigned char iv[8]; unsigned char salt[8]; int i; int plainlen; int finallen; memcpy(salt,coded+8,8); fprintf(stderr,"salt="); for (i=0; i<8; i++) fprintf(stderr,"%02X",salt[i]); fprintf(stderr,"\n"); EVP_BytesToKey(EVP_bf_cbc(),EVP_md5(),salt,keystr,keystr_len,1,key,iv); EVP_CIPHER_CTX ctx; EVP_CIPHER_CTX_init(&ctx); EVP_DecryptInit(&ctx,EVP_bf_cbc(),key,iv); EVP_CIPHER_CTX_set_key_length(&ctx,16); fprintf(stderr,"IV="); for (i=0; i<8; i++) fprintf(stderr,"%02X",iv[i]); fprintf(stderr,"\n"); fprintf(stderr,"KEY="); for (i=0; i<16; i++) fprintf(stderr,"%02X",key[i]); fprintf(stderr,"\n"); EVP_DecryptInit(&ctx,NULL,key,NULL); EVP_DecryptUpdate(&ctx,buffer,&plainlen,coded+16,coded_len-16); EVP_DecryptFinal(&ctx,buffer+plainlen,&finallen); char *retval=(char *)malloc(finallen+1); retval[finallen]='\0'; memcpy(retval,buffer,finallen); EVP_CIPHER_CTX_cleanup(&ctx); return retval; } ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majord...@openssl.org