DES的三重DES实现

时间:2017-05-07 07:44:14

标签: c des 3des tripledes

我尝试使用DES API实现3Des,如下所示:

des(input, output, key, mode)

哪个输入,输出和密钥各为8个字节,模式标识加密和解密类型。 我想知道是否可以使用具有可变输出长度的3Des算法?

这是我用C编写的代码,通过使用此API创建具有8字节以上密钥的3des。

但我不知道它是否正常工作或者是否可以更改输出字节。

unsigned char TripleDes(uchar *input, uchar *output,uchar *deskey, int mode)
{
    uchar tt[100];
    uchar tmpInput[100];
    uchar tmpOutput[100];
    int i=0, j=0;

    memset(tt, 0, sizeof(tt));
    memset(tmpInput, 0, sizeof(tmpInput));
    memset(tmpOutput, 0, sizeof(tmpOutput));

    j =  strlen(input);
    memcpy(tmpInput, input, j);
    while(j/8!=0){
        j-=8;
        if (mode) { //Encrypt
            des(tmpInput+i*8, tmpOutput+i*8, deskey,1);
            des(tmpOutput+i*8, tt, deskey+8, 0);
            des(tt,tmpOutput+i*8, deskey, 1);
        }
        else { //Decrypt
            des(tmpInput+i*8, tmpOutput+i*8, deskey, 0);
            des(tmpOutput+i*8, tt, deskey+8, 1);
            des(tt, tmpOutput+i*8, deskey, 0);
        }
        i++;
    }

    strcpy(output, tmpOutput);
    return;
}

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

des(tmpInput+i*8, tmpOutput+i*8, deskey,1); // step1: encrypting 8 bytes of input with first 8 bytes of key
des(tmpOutput+i*8, tt, deskey+8, 0);// step2: decrypting result of step1 with last 8 bytes of key
des(tt,tmpOutput+i*8, deskey, 1);// step3: encrypting result of step2 with first 8 bytes of key

假设您使用了16个字节的密钥,并且如果des api正在执行我在评论中提到的内容,那么它正在正确执行3DES

如果输入数据是8个字节的倍数,则输出数据的长度与输入数据相同。 如果输入数据的长度不是8的倍数,则用尾随零填充以使其为8的倍数,然后加密 例如 如果输入数据的长度为10,则输出数据的长度为16