📄 code.cpp
字号:
#include <iostream.h>
#include "Kaesar.h"
#include "Metathesis.h"
#include "DES.h"
void main()
{
char mingwen[64];
int miwen[512];
int i,j,index,m_length;
char choose,select,t;
char key1[1];
char key2[9];
char key3[9];
bool judge;
bool outofcase;
cout<<"****************************"<<endl
<<"* 数据通信加密解密演示程序 *"<<endl
<<"* version 1.0 *"<<endl
<<"****************************"<<endl<<endl;
TURN1:do
{
judge=true;
do
{
outofcase=true;
cout<<endl<<"请选择算法:"<<endl<<" 1.Kaesar算法"<<endl<<" 2.置换算法"<<endl<<" 3.DES算法"<<endl<<"选择:";
cin>>choose;
cout<<endl;
switch(choose)
{
case '1':
{
do
{
cout<<"* Kaesar算法 *"<<endl<<endl;
outofcase=true;
cout<<"您需要做:"<<endl<<" e.加密"<<endl<<" d.解密"<<endl<<" b.返回"<<endl<<"选择:";
cin>>select;
cout<<endl;
switch(select)
{
case 'e':
{
do //判别明文是否符合要求
{
cout<<"请输入明文,明文仅限于英文字母,大小写均可,不要超过64个字符!(按回车键确定):"<<endl;
cin>>mingwen;
judge=true;
for(j=0;mingwen[j]!='\0';j++)
{
if(int(mingwen[j])<65||(int(mingwen[j])>90&&int(mingwen[j])<97)||int(mingwen[j])>122)
{
judge=false;
cout<<"非法明文!"<<endl<<endl;
break;
}
}
}while(judge==false);
do
{
cout<<endl<<"请输入密钥,密钥仅限单个英文字母,忽视大小写(按回车键确定):"<<endl;
cin>>key1;
judge=true;
for(j=0;key1[j]!='\0';j++)
if(j!=0)
judge=false;
j=int(key1[0]);
if(j<65||(j>90&&j<97)||j>122) //判别密钥是否符合要求
judge=false;
if(judge==false)
cout<<"非法密钥!"<<endl;
}while(judge==false);
cout<<endl<<endl<<"原明文为:"<<mingwen<<endl<<endl;
kaesar_encryption(mingwen,key1[0]);
cout<<"加密后得到密文: ";
cout<<mingwen;
cout<<endl<<endl<<"Kaesar加密算法演示完毕"<<endl<<endl; //输出密文
cout<<"您需要:"<<endl<<" 1.对所得密文直接解密"<<endl<<" 0.返回"<<endl<<"选择:";
cin>>t;
do
{
judge=true;
if(t=='1')
{
kaesar_decryption(mingwen,key1[0]);
cout<<endl<<endl<<"解密后得到明文: "; //输出解密结果
cout<<mingwen;
cout<<endl<<endl<<"Kaesar算法演示完毕"<<endl<<endl<<endl;
}
else
{
if(t=='0');
else
judge=false;
}
}while(judge=false);
outofcase=false;
break;
}
case 'd':
{
do //判别密文是否符合要求
{
cout<<endl<<"请输入密文,密文仅限于英文字母,大小写均可,不要超过64个字符!(按回车键确定):"<<endl;
cin>>mingwen;
judge=true;
for(j=0;mingwen[j]!='\0';j++)
{
if(int(mingwen[j])<65||(int(mingwen[j])>90&&int(mingwen[j])<97)||int(mingwen[j])>122)
{
judge=false;
cout<<"非法密文!"<<endl<<endl;
break;
}
}
}while(judge==false);
do
{
cout<<"请输入密钥,密钥仅限单个英文字母,忽视大小写(按回车键确定):"<<endl;
cin>>key1;
judge=true;
for(j=0;key1[j]!='\0';j++)
if(j!=0)
judge=false;
j=int(key1[0]);
if(j<65||(j>90&&j<97)||j>122) //判别密钥是否符合要求
judge=false;
if(judge==false)
cout<<"非法密钥!"<<endl;
}while(judge==false);
cout<<endl<<endl<<"原密文为:"<<mingwen<<endl<<endl;
kaesar_decryption(mingwen,key1[0]);
cout<<"解密后得到明文: "<<endl;
cout<<mingwen;
cout<<endl<<endl<<"Kaesar解密算法演示完毕"<<endl<<endl<<endl;
outofcase=false;
break;
}
case 'b':
{
goto TURN1;
}
default:outofcase=false;
}
}while(outofcase==false);
break;
}
case '2':
{
do
{
cout<<"* 置换算法 *"<<endl<<endl;
outofcase=true;
cout<<"您需要做:"<<endl<<" e.加密"<<endl<<" d.解密"<<endl<<" b.返回"<<endl<<"选择:";
cin>>select;
cout<<endl;
switch(select)
{
case 'e':
{
do //判别明文是否符合要求
{
cout<<"请输入明文,明文仅限于英文字母,大小写均可,不要超过64个字符!(按回车键确定):"<<endl;
cin>>mingwen;
judge=true;
for(j=0;mingwen[j]!='\0';j++)
{
if(int(mingwen[j])<65||(int(mingwen[j])>90&&int(mingwen[j])<97)||int(mingwen[j])>122)
{
judge=false;
cout<<"非法明文!"<<endl<<endl;
break;
}
}
}while(judge==false);
m_length=j;
do //判别密钥是否符合要求
{
cout<<"请输入密钥,密钥为8个互不重复的英文字母,忽视大小写(按回车键确定):"<<endl;
cin>>key2;
judge=true;
for(j=0;key2[j]!='\0';j++)
{
for(i=j+1;key2[i]!='\0';i++)
{
if(key2[i]==key2[j])
{
judge=false;
}
}
if(int(key2[j])<65||(int(key2[j])>90&&int(key2[j])<97)||int(key2[j])>122)
judge=false;
}
if(j!=8)
judge=false;
if(judge==false)
cout<<"非法密钥!"<<endl;
}while(judge==false);
cout<<endl<<endl<<"原明文为:";
cout<<mingwen;
cout<<endl<<endl;
metathesis_encryption(mingwen,key2,m_length);
cout<<"加密后得到密文: "; //输出密文
cout<<mingwen;
cout<<endl<<endl<<"置换加密算法演示完毕"<<endl<<endl<<"您需要:"<<endl<<" 1.对所得密文直接解密"<<endl<<" 0.返回"<<endl<<"选择:";
cin>>t;
do
{
judge=true;
if(t=='1')
{
metathesis_decryption(mingwen,key2,m_length);
cout<<endl<<endl<<"解密后得到明文: "; //输出解密结果
for(i=0;i<m_length;i++)
cout<<mingwen[i];
cout<<endl<<endl<<"置换算法演示完毕"<<endl<<endl<<endl;
}
else
{
if(t=='0');
else
judge=false;
}
}while(judge=false);
outofcase=false;
break;
}
case 'd':
{
do //判别密文是否符合要求
{
cout<<"请输入密文,密文仅限于英文字母,大小写均可,字符数必须为8的整数倍,不要超过64个字符!(按回车键确定):"<<endl;
cin>>mingwen;
judge=true;
for(j=0;mingwen[j]!='\0';j++)
{
if(int(mingwen[j])<65||(int(mingwen[j])>90&&int(mingwen[j])<97)||int(mingwen[j])>122)
{
judge=false;
cout<<"非法密文!"<<endl<<endl;
}
}
if(judge==true&&j%8!=0)
{
judge=false;
cout<<"非法密文!"<<endl<<endl;
}
}while(judge==false);
do
{
judge=true;
cout<<endl<<"请输入明文字符数(明文字符数不能大于"<<j<<"):";
cin>>m_length;
if(m_length>j)
{
judge=false;
cout<<endl<<"明文字符数不能大于"<<j<<"!"<<endl;
}
}while(judge==false);
do //判别密钥是否符合要求
{
cout<<endl<<"请输入密钥,密钥为8个互不重复的英文字母,忽视大小写(按回车键确定):"<<endl;
cin>>key2;
judge=true;
for(j=0;key2[j]!='\0';j++)
{
for(i=j+1;key2[i]!='\0';i++)
{
if(key2[i]==key2[j])
{
judge=false;
}
}
if(int(key2[j])<65||(int(key2[j])>90&&int(key2[j])<97)||int(key2[j])>122)
judge=false;
}
if(j!=8)
judge=false;
if(judge==false)
cout<<"非法密钥!"<<endl;
}while(judge==false);
cout<<endl<<endl<<"原密文为:";
cout<<mingwen;
cout<<endl<<endl;
metathesis_decryption(mingwen,key2,m_length);
cout<<"解密后得到明文: "; //输出解密结果
for(i=0;i<m_length;i++)
cout<<mingwen[i];
cout<<endl<<endl<<"置换解密算法演示完毕"<<endl<<endl<<endl;
outofcase=false;
break;
}
case 'b':
{
goto TURN1;
}
default:outofcase=false;
}
}while(outofcase==false);
break;
}
case '3':
{
cout<<"* DES算法 *"<<endl<<endl;
outofcase=true;
do //判别明文是否符合要求
{
cout<<"请输入明文,明文仅限于英文字母,大小写均可,不要超过64个字符!(按回车键确定):"<<endl;
cin>>mingwen;
judge=true;
for(j=0;mingwen[j]!='\0';j++)
{
if(int(mingwen[j])<65||(int(mingwen[j])>90&&int(mingwen[j])<97)||int(mingwen[j])>122)
{
judge=false;
cout<<"非法明文!"<<endl<<endl;
break;
}
}
}while(judge==false);
m_length=j;
do //判别密钥是否符合要求
{
cout<<endl<<"请输入密钥,密钥为8个英文字母,忽视大小写(按回车键确定):"<<endl;
cin>>key3;
judge=true;
for(j=0;key3[j]!='\0';j++)
{
if(int(key3[j])<65||(int(key3[j])>90&&int(key3[j])<97)||int(key3[j])>122)
judge=false;
}
if(j!=8)
judge=false;
if(judge==false)
cout<<"非法密钥!"<<endl;
}while(judge==false);
cout<<endl<<endl<<"原明文为:";
cout<<mingwen;
cout<<endl<<endl;
DES_encryption(mingwen,miwen,key3,m_length);
cout<<"加密后得到密文: "<<endl; //输出密文
for(index=0;index<8;index++)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
cout<<miwen[index*64+i*8+j];
cout<<" ";
}
cout<<endl;
}
cout<<endl;
DES_decryption(mingwen,miwen,key3,m_length);
cout<<"解密后得到明文: "; //输出解密结果
cout<<mingwen;
cout<<endl<<endl<<"DES算法演示完毕"<<endl<<endl<<endl;
break;
}
default:
outofcase=false;
}
}while(outofcase==false); //选择越界则重新选择
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -