⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code.cpp

📁 DES 加密解密代码实例
💻 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 + -