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

📄 vegenere.cpp

📁 Vegenere Cipher is a kind of encryption it only can cipher the char pliantext
💻 CPP
字号:
#include <stdio.h>

void encrypt(char plaintext[],char key[],int plaintext_length)
	{
		int row,column;
		//定义并初始化密文的长度等于原文的长度
		int ciphertext_length=plaintext_length;
		char ciphertext[80];		

		//定义初始化双表
		char form[26][26]=
			{{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'},
			 {'B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A'},
			 {'C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B'},
			 {'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C'},
			 {'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D'},
			 {'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E'},
			 {'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F'},
			 {'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G'},
			 {'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H'},
			 {'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I'},
			 {'K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J'},
			 {'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K'},
			 {'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L'},
			 {'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M'},
			 {'O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N'},
			 {'P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O'},
			 {'Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P'},
			 {'R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'},
			 {'S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R'},
			 {'T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S'},
			 {'U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T'},
			 {'V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U'},
			 {'W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'},
			 {'X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W'},
			 {'Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X'},
			 {'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'}};

		//按照明文和密钥四种不同的大小写输入情况分别讨论
		for(int i=0;i<ciphertext_length;i++)
		{
			//若明文和密钥都是小写
			if(plaintext[i]>='a'&&plaintext[i]<='z'&&key[(i+9)%9]>='a'&&key[(i+9)%9]<='z')
			{	
				row=key[(i+9)%9]-97;//由于密钥重复使用,通过mod来计算密钥所对应的行
				column=plaintext[i]-97;//明文为小写,减去相对量‘a’
				ciphertext[i]=form[row][column];//得到密文直接按大写输出
				printf("%c",ciphertext[i]);
			}
			//若明文大写而密钥小写
			else if(plaintext[i]>='A'&&plaintext[i]<='Z'&&key[(i+9)%9]>='a'&&key[(i+9)%9]<='z')	
			{
				row=key[(i+9)%9]-97;//由于密钥重复使用,通过mod来计算密钥所对应的行
				column=plaintext[i]-65;//明文为大写,所以减去的相对量为‘A’
				ciphertext[i]=form[row][column]+32;//得到的密文转化为小写输出
				printf("%c",ciphertext[i]);	
			}
			//若明文小写密文为大写
			else if(plaintext[i]>='a'&&plaintext[i]<='z'&&key[(i+9)%9]>='A'&&key[(i+9)%9]<='Z')
			{
				row=key[(i+9)%9]-65;//由于密钥好重复使用,通过mod来计算密钥所对应的行
				column=plaintext[i]-97;//明文为小写,减去相对量‘a’
				ciphertext[i]=form[row][column];//得到密文直接按大写输出
				printf("%c",ciphertext[i]);	
			}
			else if(plaintext[i]>='A'&&plaintext[i]<='Z'&&key[(i+9)%9]>='A'&&key[(i+9)%9]<='Z')
			{
				row=key[(i+9)%9]-65;//由于密钥好重复使用,通过mod来计算密钥所对应的行
				column=plaintext[i]-65;//明文为大写,所以减去的相对量为‘A’
				ciphertext[i]=form[row][column]+32;//得到的密文转化为小写输出
				printf("%c",ciphertext[i]);	
			}
			else
				//若是其他字符,则按照原文的输出
				printf("%c",plaintext[i]);
		}
		printf("\n");
    }

int main()
{
	//初始化界面
	printf("*********************************\n");
	printf("******    Vegenere Cipher   *****\n");
	printf("******    Auther:zhujiao    *****\n");
	printf("******    Date:2008.9.23    *****\n");
	printf("*********************************\n\n");

	//定义原文字符串和密钥字符串
	char plaintext[80],key[20];
	//定义接受原文和密钥的字符
	char c1,c2;
	//定义和初始化原文和密钥的长度
	int plaintext_length=0,key_length=0;

	printf("Begin\n\n");
	
	//提示输入明文
	printf("Please type in plaintext:\n");
	
	while((c1=getchar())!='\n')
	{
		plaintext[plaintext_length]=c1;
		//输入一个原文字符后,原文长度加1
		plaintext_length++;
	}

	//提示输入密钥
	printf("\nPlease type in key:\n");	
	while((c2=getchar())!='\n')
	{
		key[key_length]=c2;
		//输入一个密钥字符后,密钥长度加1
		key_length++;
	}

	//调用Vegenere密码加密函数对明文进行加密并输出密文
	printf("\nThe ciphertext is:\n");
	//把原文字符串、密钥字符串、原文长度、密钥长度传递给加密函数
	encrypt(plaintext,key,plaintext_length);

	printf("\nEnd\n");
	getchar();
	return 0;

}








⌨️ 快捷键说明

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