24,854
社区成员
发帖
与我相关
我的任务
分享
//3DES
int ThreeTrip_DES(unsigned char* data,int datalen,unsigned char* key,int keylen,
unsigned char* outdata,int* outdatalen)
{
unsigned char outbuf[1024];
int outlen, tmplen;
unsigned char iv[8] = {0,0,0,0,0,0,0,0}; //8字节一个分组的长度
EVP_CIPHER_CTX ctx;
EVP_CIPHER_CTX_init(&ctx);
EVP_EncryptInit_ex(&ctx,EVP_des_ede_cbc(),NULL,key,iv);//3DES算法 EVP_des_ede_cbc\EVP_des_ede3_ecb\EVP_des_cbc
if(!EVP_EncryptUpdate(&ctx, outbuf, &outlen, (unsigned char*)data, datalen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -1;
}
//注意,传入给下面函数的输出缓存参数必须注意不能覆盖了原来的加密输出的数据
if(!EVP_EncryptFinal_ex(&ctx, outbuf + outlen, &tmplen))
{
EVP_CIPHER_CTX_cleanup(&ctx);
return -2;
}
outlen += tmplen;
EVP_CIPHER_CTX_cleanup(&ctx);
//返回数据
*outdatalen = outlen;
memcpy(outdata,outbuf,outlen);
return 0;
}