Я пытаюсь реализовать 3Des с помощью API DES, как показано ниже:
des(input, output, key, mode)
вход, выход и ключ по 8 байт каждый, а режим определяет тип шифрования и дешифрования. Мне интересно, возможно ли иметь алгоритм 3Des с переменной длиной вывода?
Это код, который я написал на C для создания 3des с ключом более 8 байт с помощью этого API.
Но я понятия не имею, работает ли он нормально или можно ли изменить выходные байты.
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;
}
Любая идея?
str*
для двоичных данных, потому что\0
может появиться где угодно, а не только в конце. - person Artjom B.   schedule 07.05.2017