📄 caesertext.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<conio.h>
#define MAXCHAR 200
#define KEYNUM 6
#define SUCCESS 1
#define FAIL 0
int keyCatch(char *kstr);
int encCea();
int decCea();
char plaTexStr[MAXCHAR];
int printMenu(int choice)
{
char choiseStr[]="<-----";
char s[]=" ";
char *chop[2]={s,s};
chop[choice]=choiseStr;
printf("*****************************************************\n");
printf("*凯撒密码的加密算法的实现: *\n");
printf("* 1.加密过程 %6s *\n",chop[0]);
printf("* 2.解密过程 %6s *\n",chop[1]);
printf("*****************************************************\n");
return getch();
}
main()
{
int keyask;
int cm=0;
while(1)
{
if(cm>1) cm=0;
if(cm<0) cm=1;
system("cls");
keyask=printMenu(cm);
if(keyask==72) cm--;
else if(keyask==80) cm++;
else if(keyask==13)
{
switch(cm)
{
case 0:if(encCea()==SUCCESS) {getch();continue;}else {printf("加密过程出错...");break;}
case 1:if(decCea()==SUCCESS) {getch();continue;}else {printf("解密过程出错...");break;}
default:{printf("未知错误!");break;}
}
}
}
}
int decCea()
{
int keydec;
char keyDecStr[KEYNUM];
char c;
int i=0;
FILE *ciphTexFp,*decTexFp;
//打开密文文件并读取
if((ciphTexFp=fopen("c:\ciphertext of ceaser.txt","r"))==NULL)
{
fprintf(stderr,"对不起,打开密文文件出错...");
return FAIL;
}
printf("密文文件c:\ciphertext of ceaser.txt打开成功!\n");
while((c=fgetc(ciphTexFp))!=EOF&&i<MAXCHAR-1)
plaTexStr[i++]=c;
plaTexStr[i]='\0';
printf("密文如下:\n");
printf("%s\n",plaTexStr);
if(fclose(ciphTexFp))
{
fprintf(stderr,"对不起,关闭明文文件出错...");
return FAIL;
}
keydec=keyCatch(keyDecStr);
//建立解密文件并解密
if((decTexFp=fopen("c:\dectext of ceaser.txt","w"))==NULL)
{
fprintf(stderr,"对不起,打开密文文件出错...");
return FAIL;
}
printf("解密文件c:\dectext of ceaser.txt建立成功!\n");
//解密过程
for(i=0;plaTexStr[i]!='\0'&&i<MAXCHAR;i++)
{
if(isupper(plaTexStr[i]))
plaTexStr[i]=((plaTexStr[i]+32-'a')-keydec+26)%26+'a';
else if(islower(plaTexStr[i]))
plaTexStr[i]=((plaTexStr[i]-32-'A')-keydec+26)%26+'A';
}
printf("解密后的明文如下:\n");
printf("%s\n",plaTexStr);
fprintf(decTexFp,"%s",plaTexStr);
if(fclose(decTexFp))
{
fprintf(stderr,"对不起,关闭解密文件出错...\n");
return FAIL;
}
return SUCCESS;
}
int encCea()
{
int keyenc;
char keyEncStr[KEYNUM];
FILE *plaTexFp,*ciphTexFp;
printf("请输入明文(不能超过200个字符):\n");
scanf("%199[^\n]%*c",plaTexStr);
fflush(stdin);
//建立明文文件并写入
if((plaTexFp=fopen("c:\plaintext of ceaser.txt","w"))==NULL)
{
fprintf(stderr,"对不起,建立明文文件出错...");
return FAIL;
}
printf("明文文件c:\plaintext of ceaser.txt建立成功!\n");
fprintf(plaTexFp,"%s",plaTexStr);
if(fclose(plaTexFp))
{
fprintf(stderr,"对不起,关闭明文文件出错...");
return FAIL;
}
//加密过程
keyenc=keyCatch(keyEncStr);
for(int i=0;plaTexStr[i]!='\0'&&i<MAXCHAR;i++)
{
if(isupper(plaTexStr[i]))
plaTexStr[i]=((plaTexStr[i]+32-'a')+keyenc)%26+'a';
else if(islower(plaTexStr[i]))
plaTexStr[i]=((plaTexStr[i]-32-'A')+keyenc)%26+'A';
}
printf("加密完毕!\n");
//建立密文文件并写入
if((ciphTexFp=fopen("c:\ciphertext of ceaser.txt","w"))==NULL)
{
fprintf(stderr,"对不起,建立密文文件出错...\n");
return FAIL;
}
fprintf(ciphTexFp,"%s",plaTexStr);
printf("密文文件c:\ciphertext of ceaser.txt保存成功!\n");
if(fclose(ciphTexFp))
{
fprintf(stderr,"对不起,关闭密文文件出错...\n");
return FAIL;
}
return SUCCESS;
}
int keyCatch(char *kstr)
{
char c;
int keysum=0;
while(1)
{
printf("请输入密钥(必须为整数):\t");
for(int i=0;i<KEYNUM;i++)
{
if(isdigit(kstr[i]=c=getchar()))
continue;
else if(c=='\n'){
for(int j=0;j<i;j++) keysum=*(kstr+j)-48+keysum*10;return keysum%26;}
else {printf("请从新输入----->");fflush(stdin);break;}
}
if(i==KEYNUM)
{
printf("对不起,输入数据过大...\n");
fflush(stdin);
printf("请从新输入----->");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -