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

📄 caesertext.cpp

📁 凯撒密码的加密算法的实现,请大家指教!啊啊啊啊啊啊啊爱爱爱
💻 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 + -