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