#include<iostream>
using namespace std;
int main()
{
char str[]="abcdefg123456789";
char key[]="8635";
char temp;
/*利用秘钥乱序*/
for(int j = 0; j < 2; j++) //对于key的前两位
for(int i = 0;(i+(key[j]-'0'))<=16; i++)
{
if(i%2!=0)//奇数位与其后面第key[j]位交换
{
temp = str[i+(key[j]-'0')];
str[i+(key[j]-'0')] = str[i];
str[i] = temp;
}
}
for(int i = 0; i < 16; i++)
cout<<str[i]<<" ";
cout<<endl;
for(int j = 2; j < 4; j++) //对于key的后两位
for(int i = 0;(i+(key[j]-'0'))<=16; i++)
{
if(i%2==0)//偶数位与其后面第key[j]位交换
{
temp = str[i+(key[j]-'0')];
str[i+(key[j]-'0')] = str[i];
str[i] = temp;
}
}
for(int i = 0; i < 16; i++)
cout<<str[i]<<" ";
cout<<endl;
/*利用秘钥复原*/
for(int j = 3; j >= 2; j--) //对于key的后两位
for(int i = 16;(i-(key[j]-'0'))>=0; i--)
{
if(i%2!=0)//奇数位与其前面第key[j]位交换
{
temp = str[i-(key[j]-'0')];
str[i-(key[j]-'0')] = str[i];
str[i] = temp;
}
}
for(int i = 0; i < 16; i++)
cout<<str[i]<<" ";
cout<<endl;
for(int j = 1; j >= 0; j--) //对于key的前两位
for(int i = 16;(i-(key[j]-'0'))>=0; i--)
{
if(i%2!=0)//奇数位与其前面第key[j]位交换
{
temp = str[i-(key[j]-'0')];
str[i-(key[j]-'0')] = str[i];
str[i] = temp;
}
}
for(int i = 0; i < 16; i++)
cout<<str[i]<<" ";
system("pause");
return 0;
}
我写了个,你看符合不