int r=ROUNDS; // ROUNDS为8
x1=*in++; x2=*in++;
x3=*in++; x4=*in; //X1 X2 X3 X4 4个16位的分组
do
{ //一次迭代过程
MUL(x1,*Z++); // 模2^16+1乘
x2+=*Z++; // 模2^16加
x3+=*Z++;
MUL(x4,*Z++); // 模2^16+1乘
t2=x1^x3; //按位异或
MUL(t2,*Z++);
t1=t2+(x2^x4);
MUL(t1,*Z++);
t2=t1+t2;
x1^=t1;
x4^=t2;
t2^=x2;
x2=x3^t1;
x3=t2;
} while (--r); // 运行8次
MUL(x1,*Z++); //最后生成4个16位的分组输出, 存放在out数组中
*out++=x1;
*out++=(x3+*Z++);
*out++=(x2+*Z++);
MUL(x4,*Z);
*out=x4;
}
// 一次读出8位明文数据到temp中
char read_char_from_file(FILE *fp)
{
char temp=0;
if ((fread(&temp,sizeof(char),1,fp))!=1)
end_of_file=1;
return (temp);
|