C/C++ code#include
#include
using namespace std;
bool FindChar(string &str,int start_index,int end_index,char ch)
{
for (int i=start_index;i<=end_index;i++)
{
if (str[i]==ch)
{
return true;
}
}
return false;
}
bool IsChar(char ch)
{
if ((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
{
return true;
}
else
{
return false;
}
}
void PrepareKey(string &key_word,string &code_str)
{
int i,j=0;
for (i=0;i
{
if (!FindChar(code_str,0,code_str.length()-1,key_word[i]))
{
code_str=code_str+key_word[i];
}
}
for (i=0;i<26;i++)
{
if (!FindChar(code_str,0,code_str.length()-1,'A'+i))
{
code_str=code_str+char('A'+i);
}
}
}
void Encrypt(const string &code_str,string &data,string &code)
{
int i;
char temp;
for (i=0;i
{
temp=data[i];
if (IsChar(temp))
{
temp=temp&0x7f;
code=code+code_str[temp-'A'];
}
else
{
code=code+data[i];
}
}
}
int FindePosition(const string &code_str,char ch)
{
for (int i=0;i
{
if (code_str[i]==ch)
{
return i;
}
}
return -1;
}
void Decrypt(const string &code_str,string &code,string &data)
{
int i;
char temp;
for (i=0;i
{
temp=code[i];
if (IsChar(temp))
{
temp=temp&0x7f;
int pos=FindePosition(code_str,temp);
data=data+char('A'+pos);
}
else
{
data=data+code;
}
}
}
int main()
{
string sour_str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string key_word;//用于生成密钥的单词
cin>>key_word;
string code_str;//产生的密钥序列
PrepareKey(key_word,code_str);//产生密钥序列的函数
string data="ATTACK AT DAWN";//明文
string code;//密文为空
Encrypt(code_str,data,code);//用于加密的操作,密码存储在code中
string new_data;//明文为空
Decrypt(code_str,code,new_data);//将密文code解密得到的明文的函数
return 0;
}

被折叠的 条评论
为什么被折叠?



