OpenSSL 作3DES加密 实现

OpenSSL 做3DES加密 实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/evp.h>


#define KEY_SIZE        24
char *sessionid = "793417094434122988465951";


int do_encrypt(char * szInput, int nInLen, unsigned char *szOutput)
{
int iOutLen = 0;
        int iTmpLen = 0;        
        char iv[KEY_SIZE] = {0};    
        EVP_CIPHER_CTX ctx;        //初始化,用到什么加密方式由EVP_des_ede3_ecb()决定的,如果改为其他加密方式,只要改这个就可以了。    
        EVP_CIPHER_CTX_init(&ctx);    
        EVP_EncryptInit_ex(&ctx, EVP_des_ede3_ecb(), NULL, (const unsigned char *)sessionid, (const unsigned char *)iv);        //加密    
        if(!EVP_EncryptUpdate(&ctx, (unsigned char*)szOutput, &iOutLen, (const unsigned char *)szInput, nInLen))    
        {        
       EVP_CIPHER_CTX_cleanup(&ctx);        
                return 0;    
        }   //结束加密    
        if(!EVP_EncryptFinal_ex(&ctx, (unsigned char *)(szOutput + iOutLen), &iTmpLen))    
{        
        EVP_CIPHER_CTX_cleanup(&ctx);        
                return 0;    
        }        
        iOutLen += iTmpLen;      
        EVP_CIPHER_CTX_cleanup(&ctx);
        return iOutLen;
}


int main()
{
FILE *fp = fopen("quartz.xml", "r");
FILE *fp2 = fopen("quartz2.xml", "a");

char string[65535] = "";

fseek(fp, 0L, SEEK_END);
int stringlen = ftell(fp);
rewind(fp);
fread(string, 1, stringlen , fp);
fclose(fp);

//stringlen = strlen(string);

unsigned long datalen = 0;
unsigned char *des_data = NULL;
        unsigned long len = strlen(sessionid);
        
if(len > 0 && (des_data = (unsigned char *)malloc(stringlen+16)) != NULL)
{
datalen = do_encrypt(string, stringlen, des_data);
        des_data[datalen] = '\0';
        }
  else
        {
                datalen = stringlen;
        }

fwrite(des_data, datalen, 1, fp2);
fclose(fp2);

return 0;

}


编译

gcc jiami.c -o jiami -lssl