我尝试使用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;
}
有什么想法吗?
答案 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