}//密钥n位求非n位不求非 for(j=0;j<28;j++){ w[31-j]=w[27-j]; } for(j=0;j<4;j++) w[j]=f[j]; for(j=0;j<8;j++){ p[j]=key0[0]&1; key0[0]=rhl(key0[0]); p[j+8]=key0[1]&1; key0[1]=rhl(key0[1]); p[j+16]=key0[2]&1; key0[2]=rhl(key0[2]); p[j+24]=key0[3]&1; key0[3]=rhl(key0[3]); } q=1; for(j=0;j<32;j++){ if(p[j]==1&&w[j]==1&&q==1){w[j]=1;q=1;} else if(p[j]==1&&w[j]==1&&q==0){w[j]=0;q=1;} else if(p[j]==0&&w[j]==0){w[j]=q;q=0;} else if(w[j]!=p[j]&&q==1){w[j]=0;q=1;} else{w[j]=1;q=0;} } for(j=0;j<8;j++){ t[7-j]=w[31-j]; } for(j=0;j<24;j++){ w[31-j]=w[23-j]; } for(j=0;j<8;j++) w[7-j]=t[7-j]; a1=a2=a3=a4=0; for(j=7;j>=0;j--){ a1=a1<<1; a1=a1|w[j]; a2=a2<<1; a2=a2|w[j+8]; a3=a3<<1; a3=a3|w[j+16]; a4=a4<<1; a4=a4|w[j+24]; } key0[0]=a1;key0[1]=a2;key0[2]=a3;key0[3]=a4;
for(j=0;j<4;j++) e[j]=f[j];
for(j=0;j<4;j++) a[j]=e[j];
for(j=7;j>=0;j--) {
zijie3=zijie3<<1; zijie3=zijie3|a[j];
}
bite5=char(zijie3); fs3.put(bite5); }
fs2.close(); fs3.close(); }
if(choose==3)
cout<<\结束!\< cout<<\< // return 0; } } //取反函数 int reverse(int x) { x=~x; x=x&1; return x; } char rhl(char cc) { unsigned char a,b; a=cc<<7; b=cc>>1; cc=a|b; return cc; } //加密函数中使用的排列码表 void encode() { switch(remainder) { case 0: //3 2 0 1 a[0]=c[2];if(d[8]==1) a[0]=reverse(a[0]); a[1]=c[3];if(d[13]==1) a[1]=reverse(a[1]); a[2]=c[1];if(d[6]==1) a[2]=reverse(a[2]); a[3]=c[0];if(d[3]==1) a[3]=reverse(a[3]); break; case 1: //3 2 1 0 a[0]=c[3];if(d[12]==1) a[0]=reverse(a[0]); a[1]=c[2];if(d[9]==1) a[1]=reverse(a[1]); a[2]=c[1];if(d[6]==1) a[2]=reverse(a[2]); a[3]=c[0];if(d[3]==1) a[3]=reverse(a[3]); break; case 2: //3 1 2 0 a[0]=c[3];if(d[12]==1) a[0]=reverse(a[0]); a[1]=c[1];if(d[5]==1) a[1]=reverse(a[1]); ; a[2]=c[2];if(d[10]==1) a[2]=reverse(a[2]); a[3]=c[0];if(d[3]==1) a[3]=reverse(a[3]); break; case 3: //3 1 0 2 a[0]=c[2];if(d[8]==1) a[0]=reverse(a[0]); a[1]=c[1];if(d[5]==1) a[1]=reverse(a[1]); a[2]=c[3];if(d[14]==1) a[2]=reverse(a[2]); a[3]=c[0];if(d[3]==1) a[3]=reverse(a[3]); break; case 5: //3 0 2 1 a[0]=c[1];if(d[4]==1) a[0]=reverse(a[0]); a[1]=c[3];if(d[13]==1) a[1]=reverse(a[1]); a[2]=c[2];if(d[10]==1) a[2]=reverse(a[2]); a[3]=c[0];if(d[3]==1) a[3]=reverse(a[3]); break; case 4: //3 0 1 2 a[0]=c[1];if(d[4]==1) a[0]=reverse(a[0]); a[1]=c[2];if(d[9]==1) a[1]=reverse(a[1]); a[2]=c[3];if(d[14]==1) a[2]=reverse(a[2]); a[3]=c[0];if(d[3]==1) a[3]=reverse(a[3]); break; case 6: //2 3 1 0 a[0]=c[3];if(d[12]==1) a[0]=reverse(a[0]); a[1]=c[2];if(d[9]==1) a[1]=reverse(a[1]); a[2]=c[0];if(d[2]==1) a[2]=reverse(a[2]); a[3]=c[1];if(d[7]==1) a[3]=reverse(a[3]); break; case 7: //2 3 0 1 a[0]=c[2];if(d[8]==1) a[0]=reverse(a[0]); a[1]=c[3];if(d[13]==1) a[1]=reverse(a[1]); a[2]=c[0];if(d[2]==1) a[2]=reverse(a[2]); a[3]=c[1];if(d[7]==1) a[3]=reverse(a[3]); break; case 8: //2 1 3 0 a[0]=c[3];if(d[12]==1) a[0]=reverse(a[0]); a[1]=c[1];if(d[5]==1) a[1]=reverse(a[1]); a[2]=c[0];if(d[2]==1) a[2]=reverse(a[2]); a[3]=c[2];if(d[11]==1) a[3]=reverse(a[3]); break; case 9: //2 1 0 3 a[0]=c[2];if(d[8]==1) a[0]=reverse(a[0]); a[1]=c[1];if(d[5]==1) a[1]=reverse(a[1]); a[2]=c[0];if(d[2]==1) a[2]=reverse(a[2]); a[3]=c[3];if(d[15]==1) a[3]=reverse(a[3]); break; case 10: //2 0 3 1 a[0]=c[1];if(d[4]==1) a[0]=reverse(a[0]); a[1]=c[3];if(d[13]==1) a[1]=reverse(a[1]); a[2]=c[0];if(d[2]==1) a[2]=reverse(a[2]); a[3]=c[2];if(d[11]==1) a[3]=reverse(a[3]); break; case 11: //2 0 1 3 a[0]=c[1];if(d[4]==1) a[0]=reverse(a[0]); a[1]=c[2];if(d[9]==1) a[1]=reverse(a[1]); a[2]=c[0];if(d[2]==1) a[2]=reverse(a[2]); a[3]=c[3];if(d[15]==1) a[3]=reverse(a[3]); break; case 12: //1 3 2 0 a[0]=c[3];if(d[12]==1) a[0]=reverse(a[0]); a[1]=c[0];if(d[1]==1) a[1]=reverse(a[1]); a[2]=c[2];if(d[10]==1) a[2]=reverse(a[2]); a[3]=c[1];if(d[7]==1) a[3]=reverse(a[3]); break; case 13: //1 3 0 2 a[0]=c[2];if(d[8]==1) a[0]=reverse(a[0]); a[1]=c[0];if(d[1]==1) a[1]=reverse(a[1]); a[2]=c[3];if(d[14]==1) a[2]=reverse(a[2]); a[3]=c[1];if(d[7]==1) a[3]=reverse(a[3]); break; case 14: //1 2 3 0 a[0]=c[3];if(d[12]==1) a[0]=reverse(a[0]); a[1]=c[0];if(d[1]==1) a[1]=reverse(a[1]); a[2]=c[1];if(d[6]==1) a[2]=reverse(a[2]); a[3]=c[2];if(d[11]==1) a[3]=reverse(a[3]); break; case 15: //1 2 0 3 a[0]=c[2];if(d[12]==1) a[0]=reverse(a[0]); a[1]=c[0];if(d[9]==1) a[1]=reverse(a[1]); a[2]=c[1];if(d[6]==1) a[2]=reverse(a[2]); a[3]=c[3];if(d[3]==1) a[3]=reverse(a[3]); break; case 16: //1 0 3 2 a[0]=c[1];if(d[4]==1) a[0]=reverse(a[0]); a[1]=c[0];if(d[1]==1) a[1]=reverse(a[1]); a[2]=c[3];if(d[14]==1) a[2]=reverse(a[2]); a[3]=c[2];if(d[11]==1) a[3]=reverse(a[3]); break; case 17: //1 0 2 3 a[0]=c[1];if(d[4]==1) a[0]=reverse(a[0]); a[1]=c[0];if(d[1]==1) a[1]=reverse(a[1]); a[2]=c[2];if(d[10]==1) a[2]=reverse(a[2]); a[3]=c[3];if(d[15]==1) a[3]=reverse(a[3]); break; case 18: //0 3 2 1 a[0]=c[0];if(d[0]==1) a[0]=reverse(a[0]); a[1]=c[3];if(d[13]==1) a[1]=reverse(a[1]); a[2]=c[2];if(d[10]==1) a[2]=reverse(a[2]); a[3]=c[1];if(d[7]==1) a[3]=reverse(a[3]); break; case 19: //0 3 1 2 a[0]=c[0];if(d[0]==1) a[0]=reverse(a[0]); a[1]=c[2];if(d[9]==1) a[1]=reverse(a[1]); a[2]=c[3];if(d[14]==1) a[2]=reverse(a[2]); a[3]=c[1];if(d[7]==1) a[3]=reverse(a[3]); break; case 20: //0 2 3 1 a[0]=c[0];if(d[0]==1) a[0]=reverse(a[0]); a[1]=c[3];if(d[13]==1) a[1]=reverse(a[1]); a[2]=c[1];if(d[6]==1) a[2]=reverse(a[2]); a[3]=c[2];if(d[11]==1) a[3]=reverse(a[3]); break; case 21: //0 2 1 3 a[0]=c[0];if(d[0]==1) a[0]=reverse(a[0]); a[1]=c[2];if(d[9]==1) a[1]=reverse(a[1]); a[2]=c[1];if(d[6]==1) a[2]=reverse(a[2]); a[3]=c[3];if(d[15]==1) a[3]=reverse(a[3]); break; case 22: //0 1 3 2 a[0]=c[0];if(d[0]==1) a[0]=reverse(a[0]); a[1]=c[1];if(d[5]==1) a[1]=reverse(a[1]); a[2]=c[3];if(d[14]==1) a[2]=reverse(a[2]); a[3]=c[2];if(d[11]==1) a[3]=reverse(a[3]); break; case 23: //0 1 2 3 a[0]=c[0];if(d[0]==1) a[0]=reverse(a[0]); a[1]=c[1];if(d[5]==1) a[1]=reverse(a[1]); a[2]=c[2];if(d[10]==1) a[2]=reverse(a[2]); a[3]=c[3];if(d[15]==1) a[3]=reverse(a[3]); break; default: break; } } //解密函数中使用的排列码表 void decode() { switch(remainder) { case 0: //3 2 0 1 if(d[8]==1) a[0]=reverse(a[0]);f[2]=a[0]; if(d[13]==1) a[1]=reverse(a[1]);f[3]=a[1]; if(d[6]==1) a[2]=reverse(a[2]);f[1]=a[2]; if(d[3]==1) a[3]=reverse(a[3]);f[0]=a[3]; break; case 1: //3 2 1 0 if(d[12]==1) a[0]=reverse(a[0]);f[3]=a[0]; if(d[9]==1) a[1]=reverse(a[1]);f[2]=a[1]; if(d[6]==1) a[2]=reverse(a[2]);f[1]=a[2]; if(d[3]==1) a[3]=reverse(a[3]);f[0]=a[3]; break; case 2: //3 1 2 0 if(d[12]==1) a[0]=reverse(a[0]);f[3]=a[0]; if(d[5]==1) a[1]=reverse(a[1]);f[1]=a[1]; if(d[10]==1) a[2]=reverse(a[2]);f[2]=a[2]; if(d[3]==1) a[3]=reverse(a[3]);f[0]=a[3]; break; case 3: //3 1 0 2 if(d[8]==1) a[0]=reverse(a[0]);f[2]=a[0]; if(d[5]==1) a[1]=reverse(a[1]);f[1]=a[1]; if(d[14]==1) a[2]=reverse(a[2]);f[3]=a[2]; if(d[3]==1) a[3]=reverse(a[3]);f[0]=a[3]; break; case 4: //3 0 2 1 if(d[4]==1) a[0]=reverse(a[0]);f[1]=a[0];