#include<iostream> #include<cmath> #include "stdio.h" using std::cin; using std::cout; using std::endl; int s0[4][4] = {{1,0,3,2},{3,2,1,0},{0,2,1,3},{3,1,3,2}}; int s1[4][4] = {{0,1,2,3},{2,0,1,3},{3,0,1,0},{2,1,0,3}}; void P10(int *key,int *p10,int *p8,int *k,int first){ if(first==0){ int key_temp[10]; for(int i = 0;i<10;i++) key_temp[i] = key[p10[i]]; for(int i=0;i<10;i++) key[i]=key_temp[i]; } if(first==0){ int temp; temp = key[0]; for(int i = 0;i<4;i++) key[i] =key[i+1]; key[4] = temp; temp = key[5]; for(int i =5;i<=8;i++) key[i] = key[i+1]; key[9] = temp; }else{ int temp,temp1; temp = key[0]; temp1 = key[1]; for(int i = 0;i<3;i++) key[i] =key[i+2]; key[3]=temp; key[4]=temp1; temp = key[5]; temp1 = key[6]; for(int i = 5;i<=7;i++) key[i] =key[i+2]; key[8]=temp; key[9]=temp1; } for(int i =0;i<8;i++) k[i] = key[p8[i]]; } void Ip(int *input,int *ip,int *output){ for(int i = 0;i<8;i++) output[i] = input[ip[i]]; } bool get_input(int *input,int n){ char in[n+1]; int c =0; while((in[c]=getchar())!='/n'&&in[c]!=EOF){ c++; if(c>=(n+1)) break; } for(int i = 0; i<n;i++){ if((in[i]-'0')<=1) input[i] = (in[i]-'0'); else return false; } return true; } void print(int *output,int n){ for(int i =0 ;i<n;i++) cout<<output[i]; cout<<endl; } void fk(int *lr,int *sk,int *ep,int *ip4){ int p4[4]; int p_temp[8]; int ep_r[8]; for(int i=0;i<4;i++) ep_r[i]=lr[ep[i]+4]; for(int i=4;i<=7;i++) ep_r[i]=lr[ep[i]+4]; for(int i=0;i<8;i++) p_temp[i]=ep_r[i]^sk[i]; for(int i=0;i<8;i++) p4[1]=s0[p_temp[0]*2+p_temp[3]][p_temp[1]*2+p_temp[2]]%2; p4[0]=(s0[p_temp[0]*2+p_temp[3]][p_temp[1]*2+p_temp[2]])/2; p4[3]=s1[p_temp[4]*2+p_temp[7]][p_temp[5]*2+p_temp[6]]%2; p4[2]=(s1[p_temp[4]*2+p_temp[7]][p_temp[5]*2+p_temp[6]])/2; int p4_temp[4]; for(int i=0;i<4;i++) p4_temp[i]=p4[ip4[i]]; for(int i=0;i<4;i++) lr[i]=lr[i]^p4_temp[i]; } void swap(int *lr){ int temp; for(int i=0;i<4;i++){ temp=lr[i]; lr[i]=lr[i+4]; lr[i+4]=temp; } } void char_bin(char a,int *input_ip){ for(int i=0;i<8;i++) input_ip[i]=0; int b=(int)a; int i=0; while(true){ if(b<2) input_ip[i++]=b; else input_ip[i++]=b%2; b=b/2; if(b<2){ input_ip[i++]=b; break; } } } char bin_char(int *input_ip){ int first=0; for(int i=7;i>=0;i--) if(input_ip[i]!=0){ first=i; break; } int a=0; for(int i=0;i<=first;i++) a+=pow((double)2,i)*input_ip[i]; return (char)a; } void encoding(char *a,int size,int *k1,int *k2,int *ip,int *ipr,int *ep,int *ip4){ int input_ip[8]={0,0,0,0,0,0,0,0}; int output_ip[8]={0,0,0,0,0,0,0,0}; int ci[300][8]; int last=0; for(int i=0;i<size;i++) if(a[i]=='n'||a[i]=='
|
近期评论