#include "iostream.h"
int main()
{
void encrupt(char *,char *);
void decrupt(char *,char *);
cout<<"替代密码演示"<<endl;
int p,i=0,j=0,k;
cout<<"输入密钥句子(只含小写字母): ";
char kw[50];
cin>>kw;
int len=0;
while(kw[len]!='\0')
len++;
char key[27];
key[0]=kw[0];
bool b[26];
for(i=0;i<26;i++)
b[i]=false;
b[(int)kw[0]-97]=true;
for(i=1;i<len;i++) //求加密密钥
{
if(j==25)
break;
if(b[(int)kw[i]-97]==false)
{
key[++j]=kw[i];
b[(int)kw[i]-97]=true;
}
}
k=j;
for(char a='a';a<='z';a++)
{
if(b[(int)a-97]==false)
key[++j]=a;
}
while(true)
{
cout<<"如果加密,输入1;如果解密,输入2;否则输入其它数:";
cin>>p;
if(p!=1 && p!=2)
return 0;
if(p==1)
cout<<"输入明文(只含小写字母):";
else
cout<<"输入密文(只含小写字母):";
char message[50];
cin>>message;
if(p==1)
encrupt(message,key);
else
decrupt(message,key);
}
return 0;
}
void encrupt(char *message,char *key) //加密函数
{
char transmit[50];
for(int i=0;message[i]!='\0';i++)
transmit[i]=key[(int)message[i]-97];
transmit[i]=0;
cout<<"相应的密文为: "<<transmit<<endl;
}
void decrupt(char *message,char *key) //解密函数
{
char transmit[50];
char de[26];
for(int i=0;i<26;i++)//求逆置换
de[(int)key[i]-97]='a'+i;
for(i=0;message[i]!='\0';i++)
transmit[i]=de[(int)message[i]-97];
transmit[i]=0;
cout<<"相应的明文为: "<<transmit<<endl;
}