openssl DES_ede3_cbc_加密遇到大小为8的未初始化值的使用 使用C++调用OpenSSL加密库获取错误消息,流程为:
==8752==使用大小为8的未初始化值 ==8752==at 0x4EC3279:DES_encrypt2(在/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中) ==8752==0x4EC3A6E:DES_encrypt3(在/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中) ==8752==0x4EC43C2:DES_ede3_cbc_encrypt(in/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0) ==8752==by0x403808:des3Encrypt(xcode.c:454) ==8752==by 0x402A60:main(server.c:428) 和源代码:openssl DES_ede3_cbc_加密遇到大小为8的未初始化值的使用 使用C++调用OpenSSL加密库获取错误消息,流程为:,openssl,Openssl,==8752==使用大小为8的未初始化值 ==8752==at 0x4EC3279:DES_encrypt2(在/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中) ==8752==0x4EC3A6E:DES_encrypt3(在/usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0中) ==8752==0x4EC43C2:DES_ede3_cbc_encrypt(in/usr/lib/x86_64-linux-gnu/l
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;
}
int-des3Encrypt(无符号字符*Out,字符*Key1,字符*Key2,字符*Key3,字符*Msg,int-size)
{
无符号字符*Res;
DES_cblock键1、键2、键3;
DES_cblock ivsetup={'\0','\0','\0','\0','\0','\0','\0','\0'};
依维柯大学;
附件ks1、ks2、ks3;
memcpy(&key1,key1,8);
memcpy(&key2,key2,8);
memcpy(&key3,key3,8);
DES_set_键((DES_cblock*)键1和ks1;
DES_set_键((DES_cblock*)键2和ks2);
DES_set_键((DES_cblock*)键3和ks3);
int len=大小;
/*
短杂散=透镜%8;
printf(“3des encode add bit before:%d,”,len);
如果(马刺!=0){
len=(len+8-Spuse);
}
printf(“之后:%d\n”,len);
*/
Res=(无符号字符*)malloc(len*sizeof(无符号字符));
如果(!Res)返回0;
unsigned char*InBuffer=(unsigned char*)malloc(len*sizeof(unsigned char));
如果(!InBuffer)返回0;
bzero(InBuffer,len);
memcpy(InBuffer、Msg、size);
memcpy(ivec、ivsetup、sizeof(ivsetup));
如果(InBuffer==NULL | | Res==NULL | | ivec==NULL)
{
printf(“未初始化失败。\n”);
}
DES_ede3_cbc_encrypt(InBuffer、Res、len、&ks1、&ks2、&ks3、&ivec、DES_encrypt)即使它不能解决您的问题,您也必须使用代码中称为spure的值来初始化填充字节。因此,如果您试图在输入的末尾添加3个字节,使len%8==0,那么您实际添加到输入末尾的字节应该是333。参见此处的“关于填充”,您也应该为零c memset(&ivec,0,sizeof(ivec));您是否使用-O0
或-O1
per编译库和程序?您可能无法使用/usr/lib/x86_64-linux-gnu/libcrypto。因此
,因为它可能是使用-O2
或-O3
编译的。