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