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

📄 encodedecode.cpp

📁 编写//凯撒密码的模拟程序 //1:用于凯撒密码的加密 //2:用于已知密钥的解密 //3:用于未知密钥的解密
💻 CPP
字号:
//**************************************************************************
//Program: EncodeandDecode.cpp
//凯撒密码的模拟程序
//1:用于凯撒密码的加密
//2:用于已知密钥的解密
//3:用于未知密钥的解密
//0:表示退出该程序
//**************************************************************************

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
               

void prt_menu();                 //菜单    
void Encode();                   //加密
int encode(char temp,int KEY);    //加密算法
void Decode_key();               //有密钥的解密
void Decode_nokey();             //没有密钥的解密
int decode(char temp,int KEY);   //解密算法


//**************************************************************************
//主函数
//int main()
int  main()                         
{
  char choice,ch; //选用字符型可以增强程序的健壮性
  prt_menu();
  scanf("%c",&choice);
  while((choice!='0')||(choice=='1')||(choice=='2')||(choice=='3'))//判断增强程序的健壮性
  {
    switch(choice)
    {
      case '1': Encode();                break;
      case '2': Decode_key();            break;
      case '3': Decode_nokey();          break;
	  default : {
		           printf("\nInput error!Please select again!\n");
				   ch=getchar();//用于接受多余的字符
				}
    }
    prt_menu();
    scanf("%c",&choice);
   }
   printf("\n-----Exit!!!-----\n\n\n\n");
   return 0;
}

//************************************************************************** 
//菜单函数
//void prt_menu() 
void prt_menu()                       
{ 
  printf("*****************MENU*************************\n");
  printf("欢迎进入凯撒密码的模拟程序!\n");
  printf("[1]  Encode\n");
  printf("[2]  Decode_key  (You know the key) \n");
  printf("[3]  Decode_nokey(You don't know the key) \n");
  printf("[0]  Exit!\n");
  printf("**********************************************\n");
  printf("Please seleect[0-3]:");
}


//**************************************************************************
//加密函数
//void Encode()
void Encode()                        
{
      int  KEY;                //密钥
	  char filename[31];       //“加密”和“解密”文件的名字
	  char buffer[257];        //“加密”和“解密”的文件大小
	  FILE *Handle;            //文件指针
	  int ReturnValue=1;       //返回值
	  unsigned int counter=0;  //计数器
	  char temp;               //加密过程所用的临时变量             
	  char ch;                  //用于接受多余的字符
 	  
	  printf("\nPlease input your key for encoding:"); 
	  scanf("%d",&KEY);
  	  
	  KEY=KEY%26;              //密钥和26求余
        
      printf("\nPlease input the filename for storing the text:");
	  scanf("%s",filename);
      
	  ch=getchar();           //此语句用来接收在执行scanf语句时最后输入的回车符
	 
	  Handle=fopen(filename,"w"); // 以“只写”方式打开文件
		 if(Handle<=0)
		 {
			 printf("\n\n创建文件失败...");
			 ReturnValue=-1;
		 }
		 else
		 {
			 printf("\n请输入你要加密的文件,");
			 printf("输入空白的一行代表该文件结束。\n");

			 while(gets(buffer)!=NULL)
			 {
				 if(buffer[0]==0)
					 break;
				 for(counter=0;counter<strlen(buffer);counter++)
				 {
					     temp=buffer[counter];
					 	 temp=encode(temp,KEY);
					     temp=fputc(temp,Handle);
					
				 }
			 }
			 
			 fclose(Handle);
			 printf("\n文件已被加密。\n");
		 }
	   printf("\n");
}


//**************************************************************************
//加密算法
//int encode(char temp,int KEY)
int encode(char temp,int KEY)  
{
	
    return(temp+KEY);
	
}



//**************************************************************************
//已知密钥的解密
//void Decode_key()
void Decode_key() 
{
	    int  KEY;                //密钥
	    char filename[31];       //“加密”和“解密”文件的名字
	    FILE *Handle;            //文件指针
	    int ReturnValue=1;       //返回值
	    char temp;         //解密过程所用的临时变量 
	    char ch;                 //用于接受多余的字符
	     
	    printf("\nPlease input your key for decoding:"); 
	    scanf("%d",&KEY);
  	    
		KEY=KEY%26;              //密钥和26求余
        
        printf("\nPlease input the filename wanted to be decoded:");
	    scanf("%s",filename);
        
		ch=getchar();            //此语句用来接收在执行scanf语句时最后输入的回车符
	    
		 Handle=fopen(filename,"r");    //以“只读”方式打开文件
		 if(Handle<=0)
		 {
            printf("\n\n打开文件失败...");
			ReturnValue=-2;
		 }
		 else
		 {   temp=getc(Handle);
		     while(!feof(Handle))
			 {
				                    
		           temp=decode(temp,KEY);
			       putchar(temp);
			       temp=getc(Handle);
								 
			 }
		 fclose(Handle);
		 printf("\n文件已被解密到屏幕。\n");
	 }
	printf("\n");
}


//**************************************************************************
//未知密钥的解密
//void Decode_nokey()
void Decode_nokey()
{
        int  KEY=0;              //密钥
	    char filename[31];       //“加密”和“解密”文件的名字
	    FILE *Handle;            //文件指针
	    int ReturnValue=1;       //返回值
	    char temp;         //解密过程所用的临时变量 
	    char ch;                 //用于接受多余的字符
	    
	        
	           
        printf("\nPlease input the filename:");
	    scanf("%s",filename);
        ch=getchar();           //此语句用来接收在执行scanf语句时最后输入的回车符
	    
		for(KEY=0;KEY<26;KEY++)
		{
		 Handle=fopen(filename,"r");   //以“只读”方式打开文件 
		 if(Handle<=0)
		 {
            printf("\n\n打开文件失败...");
			ReturnValue=-2;
		 }
		 else
		 {   temp=getc(Handle);
		     while(!feof(Handle))
			 {
				 	 
                   temp=decode(temp,KEY);
			       putchar(temp);
			       temp=getc(Handle);				 
					 
			 }
		 fclose(Handle);
		 }
		 printf("\tThis time KEY=%d\n",KEY);
	}
		 printf("\n文件的所有可能已被解密到屏幕,请你选择。\n");
		 printf("\n\n");
}



//**************************************************************************
//解密算法
//int decode(char temp,int KEY) 
int decode(char temp,int KEY)   
{
	return(temp-KEY);
}

⌨️ 快捷键说明

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