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

📄 traditionalcode.cpp

📁 自己在密码学实验课上写的一个传统加密算法
💻 CPP
字号:
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
int main()
{
     int start;
	 cout<<"请选择加密算法:"<<endl;
	 cout<<"1  单表代换密码算法"<<endl;
	 cout<<"2  移位密码算法"<<endl;
	 cout<<"3  Vigenere 密码算法"<<endl;
	 cin>>start;
	 if(start==1)
	 {   int define;char  str1[100],sinput[1000],soutput[1000],ch;int i=0,length1,length2,en[27]={0},value,de[27]={0},count=1;//注意下count到底初值是用0还是1
		 cout<<"您现在使用的是单表代换密码算法"<<endl;
		 cout<<"1   加密 "<<endl;
		 cout<<"2   解密 "<<endl;
		 cin>>define;

       

		 ifstream infile1("key.txt");    //读取密钥
		 
		 while(infile1.get(ch))        //读取明文   
		 {
              str1[i]=ch;
			  i++;
		 }
         length1=i;
           for(i=0;i<length1;i++)
		   {   
			   if(str1[i]>64 && str1[i]<91)       //将大写转换成小写
				   str1[i]+=32;
			   if(str1[i]>96 && str1[i]<123)
			   {
				   
                          value=str1[i]-96;         
						  if(en[value]==0) 
						  {
							  en[value]=count++;      //建立加密代换表
							  
						  }
				  
			   }
		   }
           for(i=1;i<27;i++)
			   if(en[i]==0)  {en[i]=count++;}       //建立加密代换表(在密钥文件中未出现的字符进行一个顺序排序)
			 for(i=1;i<27;i++)
			 {
				 value=en[i];                   
				 de[value]=i;          //建立解密代换表         
			 }
          infile1.close();

		 if(define==1)
		 {
		  ifstream  infile2("plaintext.txt");  //加密时,先读取明文
		  i=0;
		  while(infile2.get(ch))
		  {
			  sinput[i]=ch;
			  i++;
		  }
		  length2=i;
        for(i=0;i<length2;i++)
		{   
			if(sinput[i]>64 && sinput[i]<91)     
				sinput[i]+=32;
			if(sinput[i]>96 && sinput[i]<123)
			{
				soutput[i]=en[(int)(sinput[i]-96)]+96;        //解密
			}
			else  soutput[i]=sinput[i];
		}
		infile2.close();
		ofstream  out("ciphertext.txt");     //输出密文
		for(i=0;i<length2;i++)
		{  
               out<<soutput[i];
		}
		out.close();

		 }


		 /*  进行解密*/
		 else if(define==2)
		 {  
             /* 取密文 */
			 ifstream   din2("ciphertext.txt");
			 i=0;
			 while(din2.get(ch))
			 {
				 if(ch>64 && ch<91)
					 ch+=32;
				 sinput[i++]=ch;

			 }
			 length2=i;
			 din2.close();
			 ofstream   dout2("plaintext.txt");
			 for(i=0;i<length2;i++)
			 {
				 if(sinput[i]>'a' && sinput[i]<'z')
				 {
                      soutput[i]=de[(int) (sinput[i]-96)]+96;  //解密
				 }
				 else  soutput[i]=sinput[i];
				 dout2<<soutput[i];
			 }

             
		 }

	 }
	 else if(start==2)
	 {     
		 int define; 
		 int k,length1,i=0;
		 char   input[1000];
	     char   output[1000];
		 char ch,out;
		   cout<<"您现在使用的是移位密码算法:"<<endl;
         cout<<"1   加密 "<<endl;
		 cout<<"2   解密 "<<endl;
		 cin>>define;


		  /* 进行加密 */
		  
           ifstream infile1("key.txt");     //读取密钥
		   infile1>>k;
		   infile1.close();
         if(define==1)
		  {
		   ifstream infile2("plaintext.txt");       //读取明文
		   while(infile2.get(ch))
		   {
			   input[i]=ch;
			   i++;
		   }
		   infile2.close();
		   length1=i;
		   for(i=0;i<length1;i++)
		   {

          if(input[i]>'a'-1 && input[i]<'z'+1)
		  {
                output[i]= ((int)(input[i]-97)+k)%26+97;   //加密过程
		  }
		  else if(input[i]>'A'-1 &&  input[i]<'Z'+1)
		  {
                output[i]= ((int)(input[i]-65)+k)%26+65;
		  }
		  else  output[i]=input[i];
		   }
		   ofstream  out("ciphertext.txt");
		   for(i=0;i<length1;i++)
			   out<<output[i];
		   out.close();
		  }

             /* 进行解密 */
		  else if(define==2)
		  {
                ifstream   din2("ciphertext.txt");    
				ofstream   dout2("plaintext.txt");
				while(din2.get(ch))        
				{
                   
          if(ch>'a'-1 && ch<'z'+1)
		  {
                out= ((int)(ch-97)-k+26)%26+97;
			
		  }
		  else if(ch>'A'-1 &&  ch<'Z'+1)
		  {
                out= ((int)(ch-65)-k+26)%26+65;
		  }
		  else  out=ch;
           
		   dout2<<out;
		    
		}
             din2.close();
			 dout2.close();
		  }

	 }


	 else if(start==3)
	 {   
		 
        int i=0,length1,length2,j,define;
         char  ch,c;int key[10];
		 char input[1000];
		 char output[1000];
		cout<<"您使用的是Vigenere 密码算法"<<endl;
         cout<<"1   加密 "<<endl;
		 cout<<"2   解密 "<<endl;
		 cin>>define;
		 ifstream  infile1("key.txt");
		 while(infile1.get(ch))
		 {   
			 if(ch>='A' && ch<='Z')
				 ch+=32;
              if(ch>='a' && ch<='z')  
			 key[i]=(int)(ch-97);
			 i++;
		 }
		 length1=i;
		 infile1.close();
		 if(define==1)
		 {
		 ifstream  infile2("plaintext.txt");
		 i=0;
		 while(infile2.get(ch))
		 {   
             if(ch>='A' && ch<='Z')
				 ch+=32;
			 input[i]=ch;
			 i++;
		 }
		 length2=i;
         infile2.close();
		 ofstream   out("ciphertext.txt");
		 for(i=0,j=0;i%=length1,j<length2;j++)       //实现一个分组后的加密过程
		 {
			 if(input[j]>='a' && input[j]<='z')
			 {
				 c=(input[j]-97+key[i++])%26+97;
				 out<<c;
			 }
			 else  out<<input[j];
			 
		 }

	 }
	 else if(define==2)
	 {  
		 i=0;
         ifstream   din2("ciphertext.txt");
		 ofstream   dout2("plaintext.txt");
         while(din2.get(ch))
		 {
            if(ch>='A'  &&  ch<='Z')
				ch+=32;
			output[i]=ch;i++;
		 }
		 length2=i;
		 for(i=0,j=0;i%=length1,j<length2;j++)
		 { 
			
			 if(output[j]>='a' && ch<='z')
			 {
				 c=(output[j]-97+26-key[i++])%26+97;
				 dout2<<c;
			 }
			 else  dout2<<output[j];
		 }

	 }
	

		 

		 }
	 

  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -