【发布时间】:2016-02-21 18:53:06
【问题描述】:
使用c++调用openssl加密库得到错误信息,流水线:
==8752== 使用大小为 8 的未初始化值
==8752== 在 0x4EC3279:DES_encrypt2(在 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 中)
==8752== by 0x4EC3A6E: DES_encrypt3(在 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 中)
==8752== by 0x4EC43C2:DES_ede3_cbc_encrypt(在 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 中)
==8752== by 0x403808: des3Encrypt (xcode.c:454)
==8752== by 0x402A60: main (server.c:428)
及源代码:
int des3Encrypt(unsigned char *Out,char *Key1,char *Key2,char *Key3, char *Msg, int size)
{
unsigned char* Res;
DES_cblock key1, key2, key3;
DES_cblock ivsetup = {'\0', '\0', '\0', '\0', '\0','\0', '\0', '\0'};
DES_cblock ivec;
DES_key_schedule ks1, ks2, ks3;
memcpy(&key1,Key1,8);
memcpy(&key2,Key2,8);
memcpy(&key3,Key3,8);
DES_set_key((DES_cblock *)key1, &ks1);
DES_set_key((DES_cblock *)key2, &ks2);
DES_set_key((DES_cblock *)key3, &ks3);
int len =size ;
/*
short spure=len%8;
printf("3des encode add bit before:%d,",len);
if(spure!=0 ){
len=(len+8-spure);
}
printf("after:%d\n",len);
*/
Res=(unsigned char * ) malloc(len*sizeof(unsigned char));
if(!Res) return 0;
unsigned char * InBuffer=(unsigned char * ) malloc(len*sizeof( unsigned char));
if(!InBuffer) return 0;
bzero( InBuffer, len);
memcpy( InBuffer,Msg,size );
memcpy(ivec, ivsetup, sizeof(ivsetup));
if(InBuffer == NULL || Res == NULL || ivec == NULL)
{
printf("uninitialised failed.\n");
}
DES_ede3_cbc_encrypt(InBuffer, Res, len, &ks1, &ks2, &ks3, &ivec, DES_ENCRYPT); <<<< this is 454 line
free( InBuffer );
memcpy(Out,Res,len);
bzero( Res, len);
free(Res);
Res = NULL;
return len;
}
请帮帮我,3ks。
【问题讨论】:
-
您是否使用
-O0或-O1per The Valgrind Quick Start Guide 编译了库和程序?您可能无法使用/usr/lib/x86_64-linux-gnu/libcrypto.so,因为它可能是使用-O2或-O3编译的。
标签: openssl