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 [email protected]
Automated List Manager [email protected]