#include <iostream> #include <stdio.h> #include <string.h> using namespace std; void P10_(int K[],int P10[],int K0[]) { for(int i=1;i<=10;i++) K0[i]=K[P10[i]]; } void P8_(int K[],int P8[],int K0[]) { for(int i=1;i<=8;i++) K0[i]=K[P8[i]]; } void LS_1(int K0[],int l,int r) { int temp=K0[l]; for(int i=l;i<r;i++) K0[i]=K0[i+1]; K0[r]=temp; } void LS_2(int K0[],int l,int r) { int t1=K0[l],t2=K0[l+1]; for(int i=l;i<r-1;i++) K0[i]=K0[i+2]; K0[r-1]=t1; K0[r]=t2; } int main() { int K[11],P10[11],P8[11],K1[11],K2[11],K0[11]; while(1) { cout<<"输入P10"<<endl; for(int i=1;i<=10;i++) cin>>P10[i]; cout<<"输入P8"<<endl; for(int i=1;i<=8;i++) cin>>P8[i]; cout<<"输入主密钥"<<endl; char str[11]; cin>>str; for(int i=0;i<strlen(str);i++) K[i+1]=str[i]-'0'; P10_(K,P10,K0); LS_1(K0,1,5); LS_1(K0,6,10); P8_(K0,P8,K1); LS_2(K0,1,5); LS_2(K0,6,10); P8_(K0,P8,K2); cout<<"K1"<<endl; for(int i=1;i<=8;i++) cout<<K1[i]; cout<<endl; cout<<"K2"<<endl; for(int i=1;i<=8;i++) cout<<K2[i]; cout<<endl; cout<<endl<<endl<<endl; } return 0; }