Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
openssl DES_ede3_cbc_加密遇到大小为8的未初始化值的使用 使用C++调用OpenSSL加密库获取错误消息,流程为:_Openssl - Fatal编程技术网

openssl DES_ede3_cbc_加密遇到大小为8的未初始化值的使用 使用C++调用OpenSSL加密库获取错误消息,流程为:

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

==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)

和源代码:

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
编译的。