📄 encodedecode.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 + -