读书人

OpenSSL 作3DES加密 实现

发布时间: 2012-09-09 09:27:54 作者: rapoo

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

读书人网 >编程

热点推荐